Для подсчета вхождений значения в массиве numpy. Это будет работать так:
import numpy as np
a=np.array([0,3,4,3,5,4,7])
print(np.sum(a==3))
# 2
Логика заключается в том, что Булево выражение создает массив, в котором все вхождения запрошенных значений равны 1, а все остальные равны нулю. Таким образом, суммируя их, мы получим количество случаев вхождения. Это работает для массивов любой формы или типа. Не забудьте убедиться, что вы установили пакет NumPy
.
Есть два метода, которые используют для подсчета вхождения всех уникальных значений в numpy:
- уникальный - автоматически выравнивает многомерные массивы
- бинарный подсчет - работает только с одномерными массивами, содержащими только положительные целые числа
unique, counts = np.unique(a, return_counts=True)
print(unique , counts) # counts[i] равняется вхождениям unique[i] в a
# [0 3 4 5 7] [1 2 2 1 1]
bin_count=np.bincount(a)
print(bin_count) # bin_count[i] равняется вхождениям i в a
# [1 0 0 2 2 1 0 1]
Если ваши данные представляют собой массивы numpy, как правило, гораздо быстрее использовать методы numpy, чем преобразовывать данные в универсальные методы.
Подсчет всех вхождений всех элементов в итерируемом: collection.Counter
from collections import Counter
c = Counter(["a", "b", "c", "d", "a", "b", "a", "c", "d"])
c
# Counter({'a': 3, 'b': 2, 'c': 2, 'd': 2})
c["a"]
# 3
c[7] # не в списке (7 входило 0 раз!)
# 0
collections.Counter
может быть использован для любого итератора и подсчитывает каждое вхождение для каждого элемента.
Примечание: Одно исключение , если dict
или другой collections.Mapping
-как класса дается, то он не будет считать их, а это создает счетчик с этими значениями:
Примечание: Одно исключение , если dict
или другой collections.Mapping
-как класса дается, то он не будет считать их, а это создает счетчик с этими значениями:
Counter({"e": 2})
# Counter({"e": 2})
Counter({"e": "e"}) # Counter не проверяет значения типа int
# Counter({"e": "e"})
Подсчет вхождений подстроки в строку: str.count
astring = 'thisisashorttext'
astring.count('t')
# 4
Это работает даже для подстрок длиннее одного символа:
astring.count('th')
# 1
astring.count('is')
# 2
astring.count('text')
# 1
которое не было бы возможно с collections.Counter
, который только подсчитывает одиночные символы:
from collections import Counter
Counter(astring)
# Counter({'t': 4, 's': 3, 'h': 2,
# 'i': 2, 'a': 1, 'o': 1,
# 'r': 1, 'e': 1, 'x': 1})
Подсчет вхождений одного элемента в последовательности: list.count() и tuple.count()
alist = [1, 2, 3, 4, 1, 2, 1, 3, 4]
alist.count(1)
# 3
atuple =('bear', 'weasel', 'bear', 'frog')
atuple.count('bear')
# 2
atuple.count('fox')
# 0
Получение наиболее распространенного значения: collection.Counter
Подсчет ключи от Mapping
не представляется возможным с collections.Counter
, но мы можем посчитать значения:
from collections import Counter
adict = {'a': 5, 'b': 3, 'c': 5, 'd': 2, 'e':2, 'q': 5}
Counter(adict.values())
# Counter({5: 3, 2: 2, 3: 1})
Наиболее распространенные элементы доступны с помощью метода most_common
:
# сортируем их от наиболее распространенного
# до наименее распространенного значения:
Counter(adict.values()).most_common()
# [(5, 3), (2, 2), (3, 1)]
# получим наиболее распространенное значение
Counter(adict.values()).most_common(1)
# [(5, 3)]
# получим 2 самых распространенных значения
Counter(adict.values()).most_common(2)
# [(5, 3), (2, 2)]