我有一个函数a=x*V
,其中x
假定数千个值为x = arange(1,1000,0.1)
,V
是其他常量的组合。这使得a
总是复杂的(具有非零的实部和虚部)。但是,因为a
取决于其他值,imag(a)
对某些x
可能是负数。
但是,对于我正在做的事情,我需要imag(a)
始终是正面的,所以我需要采取负值并将它们变为正面。
我尝试过做
if imag(a)<0:
imag(a) = -1*imag(a)
这似乎不起作用,因为它给了我错误:SyntaxError: Can't assign to function call
。我认为这是因为它是一个数组所以我尝试了any()
和all()
,但这也没有用。
我现在没有选择。
答案 0 :(得分:2)
IIUC:
In [35]: a = np.array([1+1j, 2-2j, 3+3j, 4-4j])
In [36]: a.imag *= np.where(a.imag < 0, -1, 1)
In [37]: a
Out[37]: array([ 1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j])
答案 1 :(得分:0)
您不能以这种方式重新定义功能。这就像说
#entrance {
width: 8rem; //or another size
margin auto; // to center
border: 2px solid;
}
您可以做的是重新分配sqrt(x) = 2*sqrt(x)
(不是a
)的值。
imag(a)
例如,如果if imag(a) < 0
a = a - 2*imag(a)*j
,那么它会给你
a = 3 - 5j
答案 2 :(得分:0)
它似乎比减法更快。完整功能:
import numpy as np
def imag_abs(x):
mask = x.imag < 0
x[mask] = np.conj(x[mask])
return x