Python 计算一个数组中的元素在另一个数组中的出现次数

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

我想在另一个一维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.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])