我收到+ = b的TypeError,但没有b + = a(numpy)

时间:2018-10-18 07:16:06

标签: python numpy typeerror

为什么我得到TypeError的{​​{1}},但是对于下面的代码,a += b却可以正常工作

b += a

3 个答案:

答案 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')

aint32的数组,而bfloat64的数组。添加一个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时,它将尝试将这些浮点数转换为会丢失信息的整数。但是,当您以另一种方式执行此操作时,会将整数强制转换为浮点数,就很好了。