python-3.x - Numpy 具有复数和 +=

标签 python-3.x numpy complex-numbers numpy-ufunc

我在使用 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类型为floatb类型为imaginary ,这种修改是非法的。

关于python-3.x - Numpy 具有复数和 +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62763936/

相关文章:

python - 如何计算 Str 中的重复字符

python - 虚拟环境中将python从2.7升级到3.4

python-3.x - 奇怪的 Pandas 日期切片行为(不切片日期)

python - np.vectorize 和 np.apply_along_axis 两次将相同的参数传递给映射函数

python - 类型错误 : can't multiply sequence by non-int of type 'str' (already used int(str))

python-3.x - KeyConditionExpression接受无效的输入并且不引发异常

python - 如何使用pandas为每个用户选择的列的行的最小值填充NA

python - 如何从 Python 中的字符串列表中删除 numpy nan?

c - C 语言中 %di 说明符有什么作用?

c++ - 如何在 C++ 中使用复数?