Python报错:"TypeError: 'numpy.float64'对象无法解释为整数"。

28

这是产生错误的代码:

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)

有人有解决这个问题的想法吗?我如何使代码成功运行?


2
为什么不放弃 if,改用 for j in range(int(np.floor(N[i]/2))) 呢? - Basic
7个回答

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

我使用Pyzo再次运行,但它仍然报告类型错误:'numpy.float64'对象无法解释为整数。 - user3700852
5
看看你是否再次犯了同样的错误;回溯中的行号并不仅仅是为了好玩。 - Pavel

11

我来到这里时遇到了同样的错误,不过出现错误的原因不同。

这是由于1.12.0及更高版本的numpy中不支持浮点索引,即使代码被认为是有效的也会出错。

需要使用int类型而非np.float64

解决方案:尝试安装numpy 1.11.0

sudo pip install -U numpy==1.11.0.

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

1
这与问题没有关联。有吗? - Malo

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)

然后,一切又恢复了平静。就像一个库占有了 maxmin 一样!


这种方法是可行的,但你不能总是对numpy和math库持怀疑态度。 - Eugene W.

0

这个问题可能是由于使用旧版本的numpy引起的。在我的情况下,我正在使用1.18.5版本。我升级到了1.19.5版本,然后问题得到了解决。
在此之后,如果您正在使用Jupyter,则应关闭Kernell。


0

如果您正在运行任何对象检测算法并遇到此问题,那么这是由于'pycocotools'中的版本冲突所致。卸载并重新安装它,您的问题将得到解决。

pip uninstall pycocotools
pip install pycocotools

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接