将交错的 NumPy 整数数组转换为 complex64 的最快方法是啥?
Posted
技术标签:
【中文标题】将交错的 NumPy 整数数组转换为 complex64 的最快方法是啥?【英文标题】:What's the fastest way to convert an interleaved NumPy integer array to complex64?将交错的 NumPy 整数数组转换为 complex64 的最快方法是什么? 【发布时间】:2011-04-14 02:57:37 【问题描述】:我有一个输入数据流,其中包含交错的实数和虚数整数。将这些转换为 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 等。 您不是在读取 BRUKER MRI 数据,是吗?如果你看看我的相关问题:(见问题***.com/q/5422184/607562)。罗伯特在下面的回答肯定会为您的目的而震撼。 @DrSAR:不,我正在处理雷达数据。不过,感谢您的指点;它可能对我的其他一些操作有用。 【参考方案1】:[~]
|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')
【讨论】:
blimey:我在我的一些数据上尝试了这个,我和 OP Jim 做同样的事情,可以说对于大约 1000 万个数字的数组,上述视图技术需要 0.067 秒而不是 0.44 秒s(6-7 倍加速);为罗伯特·克恩竖起大拇指。以上是关于将交错的 NumPy 整数数组转换为 complex64 的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
尝试将列表转换为 numpy 数组时出现 KeyError:0
NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值