Подсчет вхождений элементов одного массива в другой массив

#python #arrays #numpy #frequency

Вопрос:

Я хочу найти частоту значений одного массива (arr1) с учетом другого массива (arr2). Они оба одномерны, и 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.

Ответ №1:

Один из способов сделать это может быть, как показано ниже:

 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])