1

混同行列を使用して、分類器のパフォーマンスを測定しています。この例は私にとってはうまくいくでしょう(ここから)が、私はずっとTypeError: Invalid dimensions for image data

from numpy import *
import matplotlib.pyplot as plt
from pylab import *

conf_arr = [[50.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [3.0, 26.0, 0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0], [4.0, 1.0, 0.0, 5.0, 0.0, 0.0, 0.0], [3.0, 0.0, 1.0, 0.0, 6.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 47.0, 0.0], [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.0]]

norm_conf = []
for i in conf_arr:
        a = 0
        tmp_arr = []
        a = sum(i,0)
        for j in i:
                tmp_arr.append(float(j)/float(a))
        norm_conf.append(tmp_arr)

plt.clf()
fig = plt.figure()
ax = fig.add_subplot(111)
res = ax.imshow(array(norm_conf), cmap=cm.jet, interpolation='nearest')
cb = fig.colorbar(res)
savefig("confmat.png", format="png")

私はpythonとmatplotlibが初めてです。何か助けはありますか?

Matplot のバージョンは 1.1.1 です。ここに完全なトレースバックがあります:

res = ...の後、私は得る

TypeError      Traceback (most recent call last)
    C:\Python27\lib\site-packages\SimpleCV\Shell\Shell.pyc in <module>()
    ----> 1 res = ax.imshow(array(norm_conf), cmap=cm.jet, interpolation='nearest')

C:\Python27\lib\site-packages\matplotlib\axes.pyc in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filter
rad, imlim, resample, url, **kwargs)
   6794                        filterrad=filterrad, resample=resample, **kwargs)
   6795
-> 6796         im.set_data(X)
   6797         im.set_alpha(alpha)
   6798         self._set_artist_props(im)

C:\Python27\lib\site-packages\matplotlib\image.pyc in set_data(self, A)
    409         if (self._A.ndim not in (2, 3) or
    410             (self._A.ndim == 3 and self._A.shape[-1] not in (3, 4))):
--> 411             raise TypeError("Invalid dimensions for image data")
    412
    413         self._imcache =None

TypeError: Invalid dimensions for image data

SimpleCV:105> cb = fig.colorbar(res)

print norm_conf の場合、次の結果が得られます: [[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],...]]. インデントの問題を修正しました。しかし、私の混乱.pngはかなり歪んでいます。さらに、マトリックス内の正方形にラベルを付けるにはどうすればよいですか?

4

1 に答える 1

2

これは私にとってはうまく機能します(matplotlib 1.1.1rc)。もともと私は、あなたの matplotlib のバージョンを確認し、トレースバック全体を投稿することを望んでいました.「トレースバック」とは、エラーの原因を示す TypeError 行の前の数行を意味します.問題があるかもしれません。

norm_confこれは、何らかの理由で入力されていない場合 (つまりnorm_conf = [])に発生するエラーです。

Traceback (most recent call last):
  File "mdim2.py", line 19, in <module>
    res = ax.imshow(array(norm_conf), cmap=cm.jet, interpolation='nearest')
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 6796, in imshow
    im.set_data(X)
  File "/usr/lib/pymodules/python2.7/matplotlib/image.py", line 411, in set_data
    raise TypeError("Invalid dimensions for image data")
TypeError: Invalid dimensions for image data

コードにインデントの問題があるように見えます。これは、タブとスペースが混在している場合によく発生します。したがって、(1)python -tt yourprogramname.py空白エラーがないかどうかを確認すること、および (2) 全体で 4 スペースのタブを使用していることを確認することをお勧めします。

于 2012-09-19T13:03:20.273 に答える