如何将复数元素乘以 numpy 中的浮点数?
How to multiply the complex elements by float numbers in numpy?
import numpy as np
beta= 0.9
A=[1+1j,2+2j]
real=np.zeros((1,2))
for i in range(1):
for l in range(2):
real[i,j] = real[i,j]-beta*A[i,j]
我不熟悉numpy
中不同类型数组的计算。我怎样才能使代码工作?
你的原始代码的问题是
的结果
real[i, j] - beta * A[i, j]
会很复杂,但是您使用 np.zeros
创建了 real
,这将为您提供一个 float64 数组,除非您明确指定不同的数据类型。由于没有安全的方法将复数值转换为浮点数,因此对 real[i, j]
的赋值将引发 TypeError
.
解决该问题的一种方法是使用复杂的数据类型初始化 real
:
real = np.zeros((1, 2), dtype=np.complex)
如果你使 A
成为一个 numpy 数组,你可以使用广播一次性完成乘法,而无需预先分配 real
且无需循环:
import numpy as np
beta = 0.9
A = np.array([1 + 1j, 2 + 2j])
real = -beta * A
print(repr(real))
# array([-0.9-0.9j, -1.8-1.8j])
看起来您可能会从阅读一些示例中受益 here。
import numpy as np
beta= 0.9
A=[1+1j,2+2j]
real=np.zeros((1,2))
for i in range(1):
for l in range(2):
real[i,j] = real[i,j]-beta*A[i,j]
我不熟悉numpy
中不同类型数组的计算。我怎样才能使代码工作?
你的原始代码的问题是
的结果real[i, j] - beta * A[i, j]
会很复杂,但是您使用 np.zeros
创建了 real
,这将为您提供一个 float64 数组,除非您明确指定不同的数据类型。由于没有安全的方法将复数值转换为浮点数,因此对 real[i, j]
的赋值将引发 TypeError
.
解决该问题的一种方法是使用复杂的数据类型初始化 real
:
real = np.zeros((1, 2), dtype=np.complex)
如果你使 A
成为一个 numpy 数组,你可以使用广播一次性完成乘法,而无需预先分配 real
且无需循环:
import numpy as np
beta = 0.9
A = np.array([1 + 1j, 2 + 2j])
real = -beta * A
print(repr(real))
# array([-0.9-0.9j, -1.8-1.8j])
看起来您可能会从阅读一些示例中受益 here。