擅长:python、mysql、java
<p>它是以x和y的顺序为代价的,但是这些代码是否满足您的性能需求?Rem:x中的相同值可以用于y的多个值</p>
<pre><code>import numpy as np
# x = np.array([0, 0.2, 1, 2.4, 3, 5]);
# y = np.array([0, 1, 2]);
x = np.random.rand(10**6)*5000000
y = (np.random.rand(10**3)*5000000).astype(int)
x_new = np.zeros(len(y)) # Create an 'empty' array for the result
x.sort() # could be skipped if already sorted
y.sort() # could be skipped if already sorted
len_x = len(x)
idx_x = 0
cur_x = x[0]
for idx_y, cur_y in enumerate(y):
while True:
if idx_x == len_x-1:
# If we are at the end of x, the last value is the best value
x_new[idx_y] = cur_x
break
next_x = x[idx_x+1]
if abs(cur_y - cur_x) < abs(cur_y - next_x):
# If the current value of x is better than the next, keep it
x_new[idx_y] = cur_x
break
# Check for the next value
idx_x += 1
cur_x = next_x
print(x_new)
</code></pre>