我有两个numpy数组Array1, Array2
。Array1
的形状为(27000,)
,而Array2
的形状为(501,3)
。这两个数组都有np.float32
数值。我必须做到以下几点:
1.首先,对于Array1
中的每个元素,在Array2
的第一列中找到最接近的匹配元素(索引)。
1.接下来,从Array2
的第二(或第三)列中检索这些“最近匹配”索引的值。在这里,我想选择是从第二列还是从第三列获得值。
我正在寻找一个快速的Numpy解决方案(最好是一行程序),因为这个操作出现在我的代码中的某个地方,现在我的当前实现(我将其分为两部分,即首先获取索引,然后选择相应的值),这似乎需要一些时间。我目前的实现是:
indices = abs(Array1[:, None] - Array2[:,0][None, :]).argmin(axis=-1)
final_val = Array2[indices,2]
人们可能会期望一个简单的Numpy操作应该足够快,然而,我需要运行我的程序数千次,所以在这方面节省的任何时间(最耗时的部分)都会对我有很大的帮助。
1条答案
按热度按时间zpjtge221#
我想我在这里找到了答案:
NumPy: Vectorize finding closest value in an array for each element in another array
简而言之,使用
numpy.searchsorted()
可以获得更好的性能。