首页 > 解决方案 > 使用 2 个数组在 numpy 中填充第三个数组

问题描述

我正在尝试在 python 中以某种方式处理两个数组。让我们说

A = np.array([5, 10, 30, 50])
B = np.array([2, 3, 4, 5])

现在我有一个目标数组C = [2, 7, 15, 25, 40]。我想为(say Y)中的每个元素找到一个输出值( Csay 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,但我想知道是否有更好或更快的方法来做同样的事情。

标签: pythonarraysnumpy

解决方案


检查这个问题最有效的方法来映射函数到 numpy array 。您可以创建一个索引数组,创建一个np.arange(C.size)包含所有组合逻辑的函数ABC通过索引获取它们的元素,并根据数组的大小选择最快的方法来应用该函数。


推荐阅读