我在使用 numpy 在 python 中处理复杂矩阵时发现了一些奇怪的事情。我将举一个简短的例子来解释它:
这段代码工作得很好:
import numpy as np
a = np.zeros((2, 2))
b = np.array([[1j, 1j], [1j, 2]])
a = a + b
print(a)
带输出
[[0.+1.j 0.+1.j]
[0.+1.j 0.+1.j]]
但是如果我将 a = a + b 更改为 a += b (我通常这样做),则会出现错误。
import numpy as np
a = np.zeros((2, 2))
b = np.array([[1j, 1j], [1j, 1j]])
a += b
print(a)
有错误:
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'add' output from dtype('complex128') to dtype('float64') with casting rule 'same_kind'
这是从哪里来的?我只是想了解一下。
最佳答案
此错误来自 numpy
是重写函数。在常规 Python 中,以下两个语句是等效的:
a = a + b
a += b
但是,与 numpy
事实并非如此。与numpy
,区分是创建新数组还是修改原始数组通常非常重要。
当您运行a = a + b
时,它的作用是创建一个新数组并将其存储回 a
.
当您运行a += b
时,它的作用是尝试修改原始 a
数组 b
。然而,自从 a
类型为float
和b
类型为imaginary
,这种修改是非法的。
关于python-3.x - Numpy 具有复数和 +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62763936/