为什么我得到TypeError
的{{1}},但是对于下面的代码,a += b
却可以正常工作
b += a
答案 0 :(得分:4)
报告整个TypeError!
----> 3 a += b
TypeError: Cannot cast ufunc add output from dtype('float64') to
dtype('int64') with casting rule 'same_kind'
a
是整数dtype,对吗? b
是浮动的。添加一个浮点数和整数,结果是一个浮点数。但是预计a+=...
会将浮点数放入整数数组a
中。 numpy
不想这样做。
但这很好:
In [3]: a = a + b
In [4]: a
Out[4]:
array([[1.01407496, 1.96122364, 1.91447533],
[1.68130058, 1.99773138, 1.50043386]])
原始整数数组a
现在已由float数组替换。这是Python级别的分配,其中a+=...
尝试(就地)修改原始a
数组。区别很重要。
答案 1 :(得分:3)
错误消息会提示您:
TypeError:无法使用强制转换规则“ same_kind”将ufunc从dtype('float64')的输出添加到dtype('int32')
a
是int32
的数组,而b
是float64
的数组。添加一个int32
和一个float64
(不要紧跟在后),将产生一个float64
。此值不能存储在a
中,但可以存储在b
中。
如果您将a
定义为使用dtype=float
,则a+=b
将完全合法:
a = np.ones((2,3), dtype=float)
答案 2 :(得分:1)
您的变量a
是类型为int
的numpy数组,而变量b
是类型为float
的numpy数组。将b
添加到a
时,它将尝试将这些浮点数转换为会丢失信息的整数。但是,当您以另一种方式执行此操作时,会将整数强制转换为浮点数,就很好了。