首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复数Numpy与+=

复数Numpy与+=
EN

Stack Overflow用户
提问于 2020-07-06 20:22:16
回答 1查看 250关注 0票数 1

在使用numpy处理python中的复杂矩阵时,我发现了一些奇怪的东西。我只举一个简短的例子来解释:

这段代码运行得很好:

代码语言:javascript
复制
import numpy as np

a = np.zeros((2, 2))
b = np.array([[1j, 1j], [1j, 2]])

a = a + b

print(a)

带输出

代码语言:javascript
复制
[[0.+1.j 0.+1.j]
 [0.+1.j 0.+1.j]]

但是,如果我将a=a+b改为a += b(我通常是这样做的),它会给我一个错误。

代码语言:javascript
复制
import numpy as np

a = np.zeros((2, 2))
b = np.array([[1j, 1j], [1j, 1j]])

a += b

print(a)

有错误:

代码语言:javascript
复制
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'add' output from dtype('complex128') to dtype('float64') with casting rule 'same_kind'

这是从哪里来的?我只想明白。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 20:39:06

此错误来自于numpy是覆盖函数这一事实。在常规Python中,以下两个语句是等价的:

代码语言:javascript
复制
a = a + b
a += b

然而,对于numpy,这是而不是的情况。对于numpy,区分是创建新数组还是修改原始数组通常是非常重要的。

当您运行a = a + b时,它所做的就是创建一个新的数组并将其存储在a中。

当您运行a += b时,它所做的就是尝试用b修改原始的a数组。但是,由于afloat类型,而bimaginary类型,所以这种修改是非法的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62763936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档