可以使用np.searchsorted
得到其中b
的第一列元素对应于a
的第一列的元件,并使用该获得除法相应的第二列元素和最后得到c
的位置。因此,假设a
和b
是NumPy的阵列,所述向量化的实施方法是 -
a0 = a[:,0]
c = np.true_divide(a[:,1],b[np.searchsorted(a0,b[:,0],sorter=a0.argsort()),1])
上面列出适用于一个通用的情况下,当a
第一列的元件不一定排序的方法。但是,如果他们进行排序,就像所列出的样品的情况下,你可以简单地忽略sorter
输入参数,并具有简化的解决方案,像这样 -
c = np.true_divide(a[:,1],b[np.searchsorted(a0,b[:,0]),1])
采样运行 -
In [35]: a
Out[35]:
array([[1, 5],
[2, 6],
[3, 3],
[4, 2]])
In [36]: b
Out[36]:
array([[3, 1],
[4, 2],
[1, 8],
[2, 4]])
In [37]: a0 = a[:,0]
In [38]: np.true_divide(a[:,1],b[np.searchsorted(a0,b[:,0],sorter=a0.argsort()),1])
Out[38]: array([ 0.625, 1.5 , 3. , 1. ])
“a”的第一列是否总是排序? 'a'中的每个第一列数字是否出现在'b'中?它们的尺寸是否相同? – kennytm
@kennytm对所有人都是。 – Scientized
每个列表中的第一个位置是否允许重复? –