【发布时间】:2016-01-08 11:04:50
【问题描述】:
有没有更快的方法将整数缓冲区读取到复数数组?
这很好用(如果缓冲区带有浮点数):
import numpy, struct
binary_string = struct.pack('2f', 1,2)
print numpy.frombuffer(binary_string, dtype=numpy.complex64)
# [ 1. + 2.j]
但是,如果读取的缓冲区是整数,那就有问题了:
import numpy, struct
binary_string = struct.pack('2i', 1,2)
print numpy.frombuffer(binary_string, dtype=numpy.complex64)
# [ 1.40129846e-45 +2.80259693e-45j]
所以,除了切片之外,我找不到任何更快的方法来转换它:
import numpy, struct
#for int32
binary_string = struct.pack('2i', 1,2)
ints = numpy.frombuffer(binary_string, dtype=numpy.int32)
print ints[::2] + 1j*ints[1::2]
# [ 1. + 2.j]
#for int16
binary_string = struct.pack('2H', 1,2)
ints = numpy.frombuffer(binary_string, dtype=numpy.int16)
print ints[::2] + 1j*ints[1::2]
# [ 1. + 2.j]
此外,是否有任何“整数复数”数据类型,所以结果可能如下所示:
[1 + 2j]
谢谢。
【问题讨论】:
-
关于复数部分,可以查看thread
-
“更快”几乎从来都不是正确的目标。
-
“更快”还可以,但是除了切片之外,还有一些“原生”的 numpy 方法吗?