Python 计算一个数组中的元素在另一个数组中的出现次数
我想在另一个一维numpy数组(Python 计算一个数组中的元素在另一个数组中的出现次数,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我想在另一个一维numpy数组(arr2)中查找给定一维numpy数组(arr1)的元素频率。数组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
arr2
)中查找给定一维numpy数组(arr1
)的元素频率。数组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]
上述方法给了我正确的答案。但是,我想知道是否有一种比我现在采用的方法更好/更有效的方法。这里有一个基于- 它假定
arr1
已排序。如果不是这样,我们有两种解决方案:
arr1
作为预处理步骤。由于,arr1
是来自arr2
的唯一元素的一部分,因此这应该是一个相对较小的数组,因此是一种廉价的排序操作searchsorted
的sorter
参数来计算idx
:
sidx=arr1.argsort()
;
idx=sidx[np.searchsorted(arr1,arr2,sorter=sidx)]
其中
arr1
假定已排序。谢谢。)arr1
假定已排序。当我从arr1=np.array([1,2,3])
更改为arr1=np.array([1,2,3])时,我得到一个错误(indexer:index 3超出轴1的范围,大小为3
)。我想知道我是否失踪了something@SiddharthSatpathy需要在那里编辑。现在应该修好了。谢谢,迪瓦卡。非常感谢您的帮助。:)
idx = np.searchsorted(arr1,arr2)
idx[idx==len(arr1)] = 0
mask = arr1[idx]==arr2
out = np.bincount(idx[mask])