python “TypeError: 'numpy.float64'对象不能被解释为整数”

28 投票
7 回答
176711 浏览
提问于 2025-04-18 08:20

这是产生错误的代码:

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)

解决办法是避免使用 numpymath

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)

然后,一切又恢复正常。感觉就像某个库控制了 maxmin

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)):

撰写回答