给定另一个数组计算一个数组元素的出现次数

Counting occurrences of elements of one array given another array

我想在给定另一个数组 (arr2) 的情况下找到一个数组 (arr1) 的值的频率。都是一维的,arr2是有序的,没有重复元素

示例:

arr1 = np.array([1, 0, 3, 0, 3, 0, 3, 0, 8, 0, 1, 8, 0])
arr2 = np.array([0, 1, 2, 8])

输出应该是:freq= np.array([6, 2, 0, 2)]

我正在尝试的是:

arr2, freq = np.unique(arr1, return_counts=True)

但此方法不输出频率为 0 的值。

一种方法如下:

import numpy as np

arr1 = np.array([1, 0, 3, 0, 3, 0, 3, 0, 8, 0, 1, 8, 0])
arr2 = np.array([0, 1, 2, 8])

arr3, freq  = np.unique(arr1, return_counts=True)
dict_ = dict(zip(arr3, freq))

freq = np.array([dict_[i] if i in dict_ else 0 for i in arr2])
freq

输出:

[6, 2, 0, 2]

替代单线解决方案

import numpy as np

arr1 = np.array([1, 0, 3, 0, 3, 0, 3, 0, 8, 0, 1, 8, 0])
arr2 = np.array([0, 1, 2, 8])

freq = np.array([np.count_nonzero(arr1 == i) for i in arr2])