首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缩放复数组的实部

缩放复数组的实部
EN

Stack Overflow用户
提问于 2012-11-26 22:41:12
回答 1查看 3.7K关注 0票数 4

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

示例

代码语言:javascript
运行
复制
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,需要执行哪些操作才能达到预期效果?如果可能的话,也就是说,不需要分离实部和虚部,缩放实部并重新组合为新的复向量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 22:44:03

这样就可以了:

代码语言:javascript
运行
复制
>>> factarr*cplxarr.real + (1j)*cplxarr.imag
array([ 0.5+2.j,  1.8+1.j,  1.4-2.j])

但我不确定这是不是最好的方法。

事实证明,至少对我来说(OS-X10.5.8,Python2.7.3,numpy 1.6.2)这个版本的速度大约是使用np.vectorize的其他版本的两倍

代码语言:javascript
运行
复制
>>> from timeit import timeit
>>> timeit('factarr*cplxarr.real+(1j)*cplxarr.imag',setup='from __main__ import factarr,cplxarr')
21.008132934570312
>>> timeit('f(cplxarr.real * factarr, cplxarr.imag)',setup='from __main__ import factarr,cplxarr; import numpy as np; f=np.vectorize(np.complex)')
46.52931499481201

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

代码语言:javascript
运行
复制
>>> timeit('f(cplxarr.real * factarr, cplxarr.imag)',setup='from __main__ import  factarr,cplxarr; import numpy as np; f=np.vectorize(complex)')
44.87726283073425

目前在TIMINGS排名中的领先者(由eryksun在下面的评论中提出)

代码语言:javascript
运行
复制
>>> timeit.timeit('a = cplxarr.copy(); a.real *= factarr ',setup='from __main__ import factarr,cplxarr')
8.336654901504517

并证明它是有效的:

代码语言:javascript
运行
复制
>>> a = cplxarr.copy()
>>> a.real *= factarr 
>>> a
array([ 0.5+2.j,  1.8+1.j,  1.4-2.j])

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13567089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档