Skip to main content
 首页 » 编程设计

python之matplotlib: "TypeError: Image data can not convert to float"看起来像一个精细矩阵

2025年05月04日11fff_TT

我知道其他人看到了类似的错误(TypeError: Image data can not convert to float、TypeError: Image data can not convert to float using matplotlib、Type Error: Image data can not convert to float),但我没有看到任何对我有帮助的解决方案。

我正在尝试用 float 据填充一个 numpy 数组,并使用 imshow 绘制它。 Y方向的数据(几乎)是Hermite多项式和高斯包络,而X方向只是一个高斯包络。

from __future__ import print_function 
import numpy as np 
import matplotlib.pyplot as plt 
 
####First we set Ne 
Ne=25 
 
###Set up a mesh with size sqrt(Ne) X sqrt(Ne) 
sqrtNe=int(np.sqrt(Ne)) 
Ky=np.array(range(-sqrtNe,sqrtNe+1),dtype=float) 
Kx=np.array(range(-sqrtNe,sqrtNe+1),dtype=float) 
[KXmesh,KYmesh]=np.meshgrid(Kx,Ky,indexing='ij') 
 
##X-direction is gussian envelope 
AxMesh=np.exp(-(np.pi*KXmesh**2)/(4.0*Ne)) 
 
Nerror=21 ###This is where the error shows up 
for n in range(Nerror,Ne): 
    ##Y-direction is a polynomial of degree n .... 
    AyMesh=0.0 
    for i in range(n/2+1): 
        AyMesh+=(-1)**i*(np.sqrt(2*np.pi)*2*KYmesh)**(n-2*i)/(np.math.factorial(n-2*i)*np.math.factorial(i)) 
    ### .... times a gaussian envelope 
    AyMesh=AyMesh*np.exp(-np.pi*KYmesh**2) 
    AyMesh=AyMesh/np.max(np.abs(AyMesh)) 
    WeightMesh=AyMesh*AxMesh 
    print("n:",n) 
    plt.figure() 
    ####Error occurs here ##### 
    plt.imshow(WeightMesh,interpolation='nearest') 
    plt.show(block=False) 

当代码到达 impow 时,我收到以下错误消息

Traceback (most recent call last): 
  File "FDOccupation_mimimal.py", line 30, in <module> 
    plt.imshow(WeightMesh,interpolation='nearest') 
  File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 3022, in imshow 
    **kwargs) 
  File "/usr/lib/python2.7/dist-packages/matplotlib/__init__.py", line 1814, in inner 
    return func(ax, *args, **kwargs) 
  File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_axes.py", line 4947, in imshow 
    im.set_data(X) 
  File "/usr/lib/python2.7/dist-packages/matplotlib/image.py", line 449, in set_data 
    raise TypeError("Image data can not convert to float") 
TypeError: Image data can not convert to float 

如果我替换代码

AyMesh=0.0 
for i in range(n/2+1): 
    AyMesh+=(-1)**i*(np.sqrt(2*np.pi)*2*KYmesh)**(n-2*i)/(np.math.factorial(n-2*i)*np.math.factorial(i)) 
### .... times a gaussian envelope 
AyMesh=AyMesh*np.exp(-np.pi*KYmesh**2) 
AyMesh=AyMesh/np.max(np.abs(AyMesh)) 

简单地

AyMesh=KYmesh**n*np.exp(-np.pi*KYmesh**2) 
AyMesh=AyMesh/np.max(np.abs(AyMesh)) 

问题消失了!? 有谁知道这里发生了什么?

请您参考如下方法:

对于大值,np.math.factorial 返回一个 long 而不是 int。具有 long 值的数组属于 dtype object,因为不能使用 NumPy 的类型进行存储。您可以通过

重新转换最终结果
WeightMesh=np.array(AyMesh*AxMesh, dtype=float) 

有一个合适的 float 组。