缩放复杂numy数组的实部

2024-10-01 02:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个复数向量(FFT的结果),我只想通过另一个向量中的因子来缩放复数的实部。在

示例

cplxarr= np.array([1+2j, 3+1j, 7-2j])
factarr= np.array([.5, .6, .2])
# desired result of cplxarr * factarr :
# np.array([.5+2j 1.8+1j 1.4-2j])

(是的,它是关于人类在特定环境下的听觉频率响应。)
显然,与上述向量相乘也会缩放虚部。在

我如何设置factarr,为了达到预期的结果,我必须做什么操作?如果有可能的话,也就是说,不需要分离实部和虚部,缩放实部并重新组合成一个新的复向量。在


Tags: offft示例np人类resultarray向量
1条回答
网友
1楼 · 发布于 2024-10-01 02:22:46

这样可以做到:

>>> factarr*cplxarr.real + (1j)*cplxarr.imag
array([ 0.5+2.j,  1.8+1.j,  1.4-2.j])

不知道这是不是最好的方法。在


至少对我来说(OS-X 10.5.8、python 2.7.3、numpy 1.6.2),这个版本的速度大约是另一个使用np.vectorize的版本的两倍:

^{pr2}$

使用python提供的np.complex和{}之间似乎没有太大区别:

>>> timeit('f(cplxarr.real * factarr, cplxarr.imag)',setup='from __main__ import  factarr,cplxarr; import numpy as np; f=np.vectorize(complex)')
44.87726283073425

当前计时排名的领先者(由eryksun在下面的评论中提出)

>>> timeit.timeit('a = cplxarr.copy(); a.real *= factarr ',setup='from __main__ import factarr,cplxarr')
8.336654901504517

并证明其有效:

>>> a = cplxarr.copy()
>>> a.real *= factarr 
>>> a
array([ 0.5+2.j,  1.8+1.j,  1.4-2.j])

如果您想在适当的地方执行操作,这显然会更快(因此可以不复制)。在

相关问题 更多 >