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

标签 python arrays python-2.7 numpy

我想找到给定一维 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 已排序。如果不是这样,我们有两个解决方案:

  1. 排序arr1作为预处理步骤。由于 arr1 是来自 arr2 的独特元素的一部分,因此这应该是一个相对较小的数组,因此是一种廉价的排序操作。

  2. 使用 sorter arg 和 searchsorted 来计算 idx:

    sidx = arr1.argsort(); idx = sidx[np.searchsorted(arr1,arr2,sorter=sidx)]

关于python - 计算一个数组的元素在另一个数组中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54136584/

相关文章:

python - 在混合数据列表中求和

python - 文件夹上的备用数据流

python - 如何根据其他 2 列聚合 pandas 列的计数

iphone - 如何将 NSArray 用作全局常量?

python - 如何从具有多个项目的Python字典中选择值

python - 这个 python/mysql 查询是否容易受到 SQL 注入(inject)的影响

c# - 将 Excel 范围转换为 C# 数组

javascript - JQuery .text() 用于数组中的元素

python - 在 python 中,有没有办法在不创建自定义函数的情况下将整数列表列表转换为字符串列表列表?

python - 我需要确保列表中只有某些字符?