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

为什么对刚创建的NumPy数组使用/=赋值会抛出true_divide相关TypeError?

问题原因

核心是NumPy数组的原地运算规则和数据类型(dtype)转换限制导致的:

  • 刚创建的arr = np.array([1,2,3])默认dtype为整数类型(通常是int32或者int64,取决于操作系统)
  • /=属于原地运算符,执行运算时默认遵循safe类型转换规则:不允许将浮点型计算结果直接写入整数类型的数组,因为该转换会丢失小数部分,属于不安全的类型转换,因此直接抛出TypeError
  • 执行arr = arr / 2时不属于原地操作,NumPy会直接创建一个新的浮点类型数组存储计算结果,再把变量arr指向这个新数组,此时arr的dtype已经变更为浮点类型
  • 后续再执行arr /= 2时,运算对象本身已经是浮点类型,计算结果也为浮点类型,不存在不安全的类型转换,因此可以正常运行。

你可以通过打印dtype验证这个逻辑:

>>> arr = np.array([1,2,3])
>>> print(arr.dtype)
int64
>>> arr = arr /2
>>> print(arr.dtype)
float64

如果确实需要对整数数组原地执行除法,可以显式指定casting规则(注意会直接截断小数部分):

>>> arr = np.array([1,2,3])
>>> np.divide(arr, 2, out=arr, casting='unsafe')
>>> arr
array([0, 1, 1])

内容的提问来源于stack exchange,提问作者Shudipto Amin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:00