[英]How to find negative imaginary parts of values in an array then turning them to positive?
我有一個函數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()
,但是那也不起作用。
我現在沒有選擇了。
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])
您不能以這種方式重新定義函數。 這就像在說
sqrt(x) = 2*sqrt(x)
你可以做的是重新分配的值a
(未imag(a)
if imag(a) < 0
a = a - 2*imag(a)*j
例如,如果a = 3 - 5j
,它將給您
3 - 5j - 2(-5)j = 3 + 5j
它看起來比進行減法更快。 完整功能:
import numpy as np
def imag_abs(x):
mask = x.imag < 0
x[mask] = np.conj(x[mask])
return x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.