Ошибка матрицы путаницы: неверные размеры данных изображения
Я использую матрицу путаницы для измерения производительности моего классификатора. Этот пример будет работать хорошо для меня ( его отсюда), но я получаю все время 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)
Для печати 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 довольно искажено. Далее, как я должен приступить к маркировке квадратов в матрице?
1 ответ
Это работает для меня просто отлично (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 пробелами повсюду.