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