我有一个形状为 1001、2663 的 numpy 数组。数组包含值 12 和 127,现在我想计算特定值的数量,在本例中为 12。所以我尝试使用 bincount,但这很奇怪。看看我得到了什么:
>>> x.shape
(1001, 2663)
>>> np.bincount(x)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
ValueError: object too deep for desired array
>>> y = np.reshape(x, 2665663)
>>> y.shape
(2665663,)
>>> np.bincount(y)
array([ 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 529750, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 2135913])
>>> np.nonzero(np.bincount(y))
(array([ 12, 127]),)
值 529750 可能是值 12 的频率,而 2135913 可能是值 127 的频率,但它不会告诉我这一点。矩阵的形状也很奇怪。
如果我尝试 sum with where 也不会给我正确的价值:
>>> np.sum(np.where(x==12))
907804649
我没有选择:SO 的尊贵用途,如何获得 numpy 矩阵中特定值的频率?
编辑
较小的例子。但仍然得到我不太了解的结果。为什么是零?
>>> m = np.array([[1,1,2],[2,1,1],[2,1,2]])
>>> np.bincount(m)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
ValueError: object too deep for desired array
>>> n = np.reshape(m, 9)
>>> n
array([1, 1, 2, 2, 1, 1, 2, 1, 2])
>>> np.bincount(n)
array([0, 5, 4])
我想我明白了。[0,5,4] 中的零表示矩阵中没有 0 值。所以在我的真实情况下,529750是矩阵中的第12个值,矩阵值0-11都是'0',而不是得到很多0值(值13-126),然后值127给出2135913的频率。但是如何将频率作为numpy数组中特定数字的单个值?