什么是将交错的NumPy整数数组转换为complex64的最快方法?

12

我有一串包含实数和虚数整数的数据流。将它们转换为complex64值是我的程序中最慢的操作。这是我的当前方法:

import numpy as np

a = np.zeros(1000000, dtype=np.int16)
b = np.complex64(a[::2]) + np.complex64(1j) * np.complex64(a[1::2])

我能否在不编写 C 扩展或使用像 Cython 这样的东西的情况下做得更好?如果我无法做得更好,那么在使用类似技术的情况下,我的最简单方法是什么?


在直接使用Numpy进行了一些尝试后,我认为你的当前实现已经达到了极致(我做的一些微小调整也没有带来明显的速度提升),尽管我还没有试过Cython等其他方法。 - JoshAdel
你不是在读取BRUKER MRI数据,对吧?如果是的话,看看我的相关问题:(请参见问题http://stackoverflow.com/q/5422184/607562)。Robert下面的答案肯定适合你的需求。 - DrSAR
@DrSAR:不,我正在处理雷达数据。谢谢你的指点,虽然它可能在我的其他操作中有用。 - Jim Hunziker
1个回答

24
[~]
|1> import numpy as np

[~]
|2> a = np.zeros(1000000, dtype=np.int16)

[~]
|3> b = a.astype(np.float32).view(np.complex64)

[~]
|4> b.shape
(500000,)

[~]
|5> b.dtype
dtype('complex64')

天哪:我在我的数据上尝试了这个,我和OP Jim做的一样,可以说对于大约1000万个数字的数组,上述视图技术只需要0.067秒,而不是0.44秒(速度提高了6-7倍);为Robert Kern点赞。 - DrSAR
11年过去了,我自己处理雷达数据(与HDF5接口)后,这就是最好的解决方案。 - Seattlenerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接