7

numpy histogram2d を使用して、2 つの変数の 2d ヒストグラムの視覚的表現の値を計算しています。

H, xedges, yedges = np.histogram2d(Z[:,0], Z[:,1], bins=100)

ここで、Z は numpy 行列です

私が得ているエラーは次のとおりです。

Traceback (most recent call last):
File "/home/.../pca_analysis.py", line 141, in <module>
   H, xedges, yedges = np.histogram2d(Z[:,0], Z[:,1], bins=100)
File "/usr/lib/python2.7/dist-packages/numpy/lib/twodim_base.py", line 615, in histogram2d
   hist, edges = histogramdd([x,y], bins, range, normed, weights)
File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 281, in histogramdd
   N, D = sample.shape
ValueError: too many values to unpack

このエラーが発生する理由がよくわかりません。ランダムな値で histogram2d 関数を使用してみましたが、正しく機能しています。Z[:,0] と Z[:,1] の両方をnumpy配列と単純なリストに変換しようとしましたが、同じ問題が発生しています。

4

1 に答える 1

6

コメントで@sebergが指摘しているように、Zは行列であるため、スライスする前に配列としてキャストする必要があります。

np.asarray(Z)[:,0]

これが必要な理由は、 がnp.matrixスライス後も 2 次元性を維持するためです。そのため、行列の列は、ヒストグラム関数が期待する形状(N,1)とは異なります。(N,)

スライス後に配列にキャストすることが機能しない理由は、キャストによって形状が変更されないためです。スライスの動作が異なります。

それが意味をなさない場合、ここに図があります:

In [4]: a = np.arange(9).reshape(3,3)

In [5]: a
Out[5]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [6]: m = np.matrix(a)

In [7]: m
Out[7]: 
matrix([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])

In [8]: m[:,0]
Out[8]: 
matrix([[0],
        [3],
        [6]])

In [9]: a[:,0]
Out[9]: array([0, 3, 6])

In [10]: m[:,0].shape
Out[10]: (3, 1)

In [11]: a[:,0].shape
Out[11]: (3,)

スライス後にキャストすると、形状は 2D のままです。

In [12]: np.array(m[:,0])
Out[12]: 
array([[0],
       [3],
       [6]])

In [13]: np.array(m[:,0]).shape
Out[13]: (3, 1)
于 2013-09-27T17:04:27.310 に答える