我正在尝试以某种方式在python中使用两个数组。可以说
A = np.array([5, 10, 30, 50])
B = np.array([2, 3, 4, 5])
现在我有一个目标数组C = [2, 7, 15, 25, 40]
。我想为(say )中具有条件的Y
每个元素找到一个输出值(say ):C
x
x < A[0]
那Y = B[0]
A[i] < x < 2*A[i] < A[i+1]
还是A[i] < x < A[i+1] < 2*A[i]
那么Y=x
A[i] < 2*A[i] < x < A[i+1]
那Y = B[i+1]
x > A[end]
那Y = x
i
是满足条件的最大可能索引
因此,输出变为 Y = [2, 7, 15, 4, 40]
这是我目前所拥有的
A = np.array([5, 10, 30, 50])
B = np.array([2, 3, 4, 5])
C = np.array([2, 7, 15, 25, 40])
diffA = np.diff(A)
diffIdx = np.squeeze(np.where(diffA > A[0:len(A)-1]+1e-6))
Y = np.array([])
for x in C:
idx = np.searchsorted(A, x)
if idx == 0:
Y = np.append(Y, B[0])
elif np.any(diffIdx==idx-1) & (x>2*A[idx-1]+1e-6):
Y = np.append(Y, B[idx])
else:
Y = np.append(Y, x)
这似乎可行,并且IPython控制台%timeit
显示了所需的时间24.7 ms
,但是我想知道是否有更好或更快速的方法可以做到这一点。
检查此问题在numpy数组上映射函数的最有效方法。您可以创建索引数组np.arange(C.size)
,做一个功能相结合的所有的逻辑A
,B
和C
元素通过索引让他们并根据您的数组的大小选择应用功能的最快方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句