You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题根源:变量名冲突

你遇到这个错误的核心原因是重复使用了同一个变量名:

  1. 代码开头你定义了总质量变量:
    M=m1+m2  # 这里M是一个数值类型(numpy.float64)
    
  2. 但在准备循环工具时,你又把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:13:49