我想找到给定一维 numpy 数组 (arr1
) 的元素在另一个一维 numpy 数组 (arr2
) 中的频率。数组 arr1
包含没有重复的元素。此外,arr1
中的所有元素都是 arr2
以这个为例,
arr1 = np.array([1,2,6])
arr2 = np.array([2, 3, 6, 1, 2, 1, 2, 0, 2, 0])
目前我使用的是:
freq = np.zeros( len(arr1) )
for i in range( len(arr1) ):
mark = np.where( arr2==arr1[i] )
freq[i] = len(mark[0])
print freq
>>[2, 4, 1]
上述方法给了我正确的答案。但是,我想知道是否有比我正在遵循的方法更好/更有效的方法。
最佳答案
这是一个基于 np.searchsorted
的矢量化解决方案-
idx = np.searchsorted(arr1,arr2)
idx[idx==len(arr1)] = 0
mask = arr1[idx]==arr2
out = np.bincount(idx[mask])
它假定 arr1
已排序。如果不是这样,我们有两个解决方案:
排序
arr1
作为预处理步骤。由于arr1
是来自arr2
的独特元素的一部分,因此这应该是一个相对较小的数组,因此是一种廉价的排序操作。使用
sorter
arg 和searchsorted
来计算idx
:sidx = arr1.argsort()
;idx = sidx[np.searchsorted(arr1,arr2,sorter=sidx)]
关于python - 计算一个数组的元素在另一个数组中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54136584/