在使用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'这是从哪里来的?我只想明白。
发布于 2020-07-06 20:39:06
此错误来自于numpy是覆盖函数这一事实。在常规Python中,以下两个语句是等价的:
a = a + b
a += b然而,对于numpy,这是而不是的情况。对于numpy,区分是创建新数组还是修改原始数组通常是非常重要的。
当您运行a = a + b时,它所做的就是创建一个新的数组并将其存储在a中。
当您运行a += b时,它所做的就是尝试用b修改原始的a数组。但是,由于a是float类型,而b是imaginary类型,所以这种修改是非法的。
https://stackoverflow.com/questions/62763936
复制相似问题