python “TypeError: 'numpy.float64'对象不能被解释为整数”
这是产生错误的代码:
import numpy as np
for i in range(len(x)):
if (np.floor(N[i]/2)==N[i]/2):
for j in range(N[i]/2):
pxd[i,j]=x[i]-(delta*j)*np.sin(s[i]*np.pi/180)
pyd[i,j]=y[i]-(delta*j)*np.cos(s[i]*np.pi/180)
else:
for j in range((N[i]-1)/2):
pxd[i,j]=x[i]-(delta*j)*np.sin(s[i]*np.pi/180)
pyd[i,j]=y[i]-(delta*j)*np.cos(s[i]*np.pi/180)
有没有人知道怎么解决这个问题?我该怎么才能让这段代码成功运行呢?
7 个回答
1
我遇到了类似的情况。之前一切都正常,但后来我开始使用pytables。乍一看,似乎没有任何错误的原因。我决定用另一个函数,这个函数有一个特定的限制(椭圆),结果出现了以下错误:
TypeError: 'numpy.float64' object cannot be interpreted as an integer
或者
TypeError: 'numpy.float64' object is not iterable
更疯狂的是:我之前使用的那个函数,代码没有改动,却也开始返回同样的错误。我的中间函数,之前用过的是:
def MinMax(x, mini=0, maxi=1)
return max(min(x,mini), maxi)
解决办法是避免使用 numpy
或 math
:
def MinMax(x, mini=0, maxi=1)
x = [x_aux if x_aux > mini else mini for x_aux in x]
x = [x_aux if x_aux < maxi else maxi for x_aux in x]
return max(min(x,mini), maxi)
然后,一切又恢复正常。感觉就像某个库控制了 max
和 min
!
2
虽然我知道这不是提问者的问题,但我刚好遇到了这个错误信息,原因和提问者的完全不同,而这个内容是搜索结果中的第一条,所以我在这里分享我的问题和解决办法。
我有这样的代码:
x = np.ndarray([1.0, 2.0, 3.0], dtype=np.float_)
你注意到那个小错误了吗?ndarray
是 numpy 的数组类,但通常你不会直接构造它。相反,你应该使用 array()
这个辅助函数:
x = np.array([1.0, 2.0, 3.0], dtype=np.float_)
换成第二种写法后,我的问题就解决了。
2
我在训练一个保留对象检测模型(faster RCNN)时也遇到了同样的问题,这个方法对我来说非常有效:
pip uninstall pycocotools
pip install pycocotools-windows
11
我来这里是因为遇到了同样的错误,不过原因不太一样。
这个错误是因为在1.12.0及更新版本的numpy中,不支持使用浮点数作为索引,即使代码看起来是有效的。
这里应该用的是int
类型,而不是np.float64
。
解决办法:试着安装numpy 1.11.0
。
sudo pip install -U numpy==1.11.0.
26
N=np.floor(np.divide(l,delta))
...
for j in range(N[i]/2):
在这里,N[i]/2
这个表达式的结果会是一个 float64
类型的数字,也就是带小数的数字。但是 range()
这个函数需要的是一个整数。所以你需要把这个结果转换成整数,可以这样做:
for j in range(int(N[i]/2)):