Python TypeError:使用imshow()打印阵列时图像数据的尺寸无效

Python TypeError:使用imshow()打印阵列时图像数据的尺寸无效,python,arrays,numpy,matplotlib,Python,Arrays,Numpy,Matplotlib,对于以下代码 # Numerical operation SN_map_final = (new_SN_map - mean_SN) / sigma_SN # Plot figure fig12 = plt.figure(12) fig_SN_final = plt.imshow(SN_map_final, interpolation='nearest') plt.colorbar() fig12 = plt.savefig(outname12) 由于new\u SN\u map是一个

对于以下代码

# Numerical operation
SN_map_final = (new_SN_map - mean_SN) / sigma_SN  

# Plot figure
fig12 = plt.figure(12)
fig_SN_final = plt.imshow(SN_map_final, interpolation='nearest')
plt.colorbar()

fig12 = plt.savefig(outname12)
由于
new\u SN\u map
是一个一维数组,
mean\u SN
sigma\u SN
是常量,我得到以下错误

Traceback (most recent call last):
  File "c:\Users\Valentin\Desktop\Stage M2\density_map_simple.py", line 546, in <module>
    fig_SN_final = plt.imshow(SN_map_final, interpolation='nearest')
  File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\pyplot.py", line 3022, in imshow
    **kwargs)
  File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\__init__.py", line 1812, in inner
    return func(ax, *args, **kwargs)
  File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\axes\_axes.py", line 4947, in imshow
    im.set_data(X)
  File "c:\users\valentin\appdata\local\enthought\canopy\user\lib\site-packages\matplotlib\image.py", line 453, in set_data
    raise TypeError("Invalid dimensions for image data")
TypeError: Invalid dimensions for image data
回溯(最近一次呼叫最后一次):
文件“c:\Users\Valentin\Desktop\Stage M2\density\u map\u simple.py”,第546行,中
fig_SN_final=plt.imshow(SN_map_final,插值='nearest')
文件“c:\users\valentin\appdata\local\enthund\canopy\user\lib\site packages\matplotlib\pyplot.py”,第3022行,在imshow中
**kwargs)
文件“c:\users\valentin\appdata\local\enthund\canopy\user\lib\site packages\matplotlib\\uuuu init\uuu.py”,第1812行,在内部
返回函数(ax,*args,**kwargs)
文件“c:\users\valentin\appdata\local\enthught\canopy\user\lib\site packages\matplotlib\axes\u axes.py”,第4947行,在imshow中
im.set_数据(X)
文件“c:\users\valentin\appdata\local\enthund\canopy\user\lib\site packages\matplotlib\image.py”,第453行,在集合数据中
raise TypeError(“图像数据的维度无效”)
TypeError:图像数据的维度无效
这个错误的来源是什么?我以为我的数字运算是允许的。

关于堆栈溢出有一个(有些)相关的问题:

这里的问题是,形状数组(nx,ny,1)仍然被视为三维数组,并且必须是
squence
d或切片为二维数组

更一般地说,例外的原因是什么

TypeError:图像数据的维度无效

如图所示:需要一个二维数组,或者三维数组的形状为3或4

您可以很容易地通过以下方式进行检查(这些检查由
imshow
完成,此功能仅用于在无效输入的情况下提供更具体的消息):

np.asarray
是由
matplotlib.pyplot.imshow
在内部完成的,因此通常最好也这样做。如果您有一个numpy数组,它是过时的,但如果没有(例如
列表
),它是必需的


在您的特定情况下,您得到了一个1D数组,因此您需要添加一个带有

或者只使用一些接受1D数组的东西,比如
plot

a = np.array([1,2,3,4,5])
plt.plot(a)
plt.show()

阅读错误信息并提供缺失信息。错误很简单。你能打印变量SN\u map\u final吗?另外,修复你的标题。这与问题无关。@MSeifert我得到:(63865L,)也就是说是1D数组?我没有投反对票。我只是改进了这篇文章的表达方式。我认为,就目前的情况来看,这是一个很好的问题,但落选的选民可能早已离去。
>>> new_SN_map = np.array([1,2,3])
>>> valid_imshow_data(new_SN_map)
To visualize an image the data must be 2 dimensional or 3 dimensional, not "1".
False
import matplotlib.pyplot as plt
a = np.array([1,2,3,4,5])
a = np.expand_dims(a, axis=0)  # or axis=1
plt.imshow(a)
plt.show()
a = np.array([1,2,3,4,5])
plt.plot(a)
plt.show()