numpy.float64无法解释为整数错误排查求助
TypeError: 'numpy.float64' object cannot be interpreted as an integer in
bmax function 我在运行一段计算依赖参数m的三重积分代码时,遇到了这个错误:
TypeError: 'numpy.float64' object cannot be interpreted as an integer
错误栈指向bmax函数:
File "C:/Users/user/.spyder-py3/temp.py", line 83, in xbound return [bmin(y,z,m)-10**(-6),bmax(y,z,m)-10**(-6)] File "C:/Users/user/.spyder-py3/temp.py", line 52, in bmax return maximum(bmin(y,z,m), M*(340*eta/(3*cos(1)*vrel(y,z,m)**9))**(1/7)) TypeError: 'numpy.float64' object cannot be interpreted as an integer
问题根源:变量名冲突
你遇到这个错误的核心原因是重复使用了同一个变量名:
- 代码开头你定义了总质量变量:
M=m1+m2 # 这里M是一个数值类型(numpy.float64) - 但在准备循环工具时,你又把
M重新赋值为空列表:M=[] # 这里直接覆盖了之前的总质量数值,现在M是一个列表对象
当bmax函数执行M*(340*eta/(3*cos(1)*vrel(y,z,m)**9))**(1/7)时,Python会尝试用列表M乘以一个浮点数((...)**(1/7)的计算结果是float类型)。而Python中列表只允许和整数相乘(用来重复列表元素),和浮点数相乘会直接抛出类型错误,这就是你看到的报错原因。
解决方法
把存储x值的数组变量名改成别的,避免和总质量的M冲突,比如改成M_vals:
修改循环准备部分的代码:
#prepare looping tools m=10**9*msun M_vals=[] # 改名,不再使用M #x value array Rate=[] #result estimation array RateUp=[] #result upper bound array RateDown=[] #result lower bound array options={'limit':200} while m<10**14*msun: # ... 其他代码保持不变 ... M_vals.append(m) # 这里同步改成M_vals Rate.append(ans[0]) RateUp.append(ans[0]+ans[1]) RateDown.append(ans[0]-ans[1]) m+=10**15 xscale('log') yscale('log') plot(M_vals,Rate,M_vals,RateUp,M_vals,RateDown) # 绘图部分也改成M_vals show()
这样bmax函数里的M就会指向最初定义的总质量数值,乘法操作就能正常执行了。
另外提个小细节:你的循环增量m+=10**15,初始m=10**9*msun=1.5e12,第一次循环后m就变成1.0015e15,远小于10**14*msun=1.5e17,所以循环会执行多次,但如果这不是你预期的逻辑,可以调整增量值。
内容的提问来源于stack exchange,提问作者Yuan Gao Alex
相关产品推荐
相关产品推荐

