形状が 1001、2663 の numpy 配列があります。配列には 12 と 127 の値が含まれています。特定の値 (この場合は 12) の数を数えたいと思います。私が得るものを見てください:
>>> 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 の頻度ですが、これはわかりません。マトリックスの形も変です。
どこでも合計しようとすると、正しい値が得られません:
>>> 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 配列内の特定の数値の単一の値として頻度を取得する方法は?