一个数字出现在numpy数组中的次数

时间:2016-12-09 19:22:00

标签: python python-3.x numpy count

我需要找到一种方法来计算使用np.random.randint()

创建的随机矩阵中从0到9的每个数字出现的次数
import numpy as np
p = int(input("Length of matrix: "))
m = np.random.randint(0,9,(p,p))
print(m)

例如,如果矩阵的长度= 4

  • [[3 4 6 5] [3 4 4 3] [4 2 4 8] [6 8 2 7]]

4号出现多少次?它应该返回5.

5 个答案:

答案 0 :(得分:7)

你应该能够很简单地得到这个:

list(m.flatten()).count(x)

另一个可能更快的选择是使用numpy builtin count_nonzero()

np.count_nonzero(m == x)

Hooray内置功能。<​​/ p>

答案 1 :(得分:2)

您可以使用sum功能:

In [52]: m = np.random.randint(0,9,(4,4))
In [53]: m
Out[53]: 
array([[8, 8, 2, 1],
       [2, 7, 1, 2],
       [8, 6, 8, 7],
       [5, 2, 5, 2]])

In [56]: np.sum(m == 8)
Out[56]: 4

m == 8将为每个8返回一个包含True的布尔数组,然后由于python将True计算为1,您可以对数组项进行求和以获得预期项的数量。

答案 2 :(得分:1)

如果您想从所有矩阵元素中获取频率,这是使用numpy.ndarray.flattencollections.Counter的简单解决方案:

ls

例如,当p = 3时,你会得到这样的结果:

import numpy as np
import collections

p = int(input("Length of matrix: "))
m = np.random.randint(0, 9, (p, p))
print(m)
print(collections.Counter(m.flatten()))

答案 3 :(得分:0)

您可以展平矩阵,然后使用列表SELECT t.* FROM Test t WHERE exerVariName = 'Comp' ORDER BY kg DESC LIMIT 1; 方法:

count()

答案 4 :(得分:-1)

我会尝试使用参数 return_counts=True 的 numpy 唯一函数(请参阅:https://numpy.org/doc/stable/reference/generated/numpy.unique.html)。

import numpy as np
p = int(input("Length of matrix: "))
m = np.random.randint(0,9,(p,p))
# print(m)
un, nm = np.unique(m, return_counts = True)
# if number that you are looking for is 1 then:
print(nm[un==1])