python将字符串变成复数_Python:将浮点字符串解压为复数

是的,有。您可以跳过python复杂类型的步骤,因为在内部,numpy将n复数数组表示为2n浮点数组。在

下面是一个来自REPL的简单示例:>>> import numpy as np

>>> a = np.array([1.,2.,3.,4.])

>>> a

array([ 1., 2., 3., 4.])

>>> a.dtype

dtype('float64')

>>> a.dtype = complex

>>> a

array([ 1.+2.j, 3.+4.j])

>>>

请注意,如果初始数组的dtype不是float,那么这就不起作用了。在

^{pr2}$

对你来说。您想要的数据类型是np.dtype('complex64'),因为每个复数都是64位(2*4*8)。在for x in range(dimX):

for y in range(dimY):

#2 floats, each 4 bytes, is one complex number

trace=stream.readBytes(8*dimZ)

a = np.frombuffer(trace,dtype=np.dtype('complex64'))

data[x][y] = a

那应该能让你加快速度。下面是REPL中关于numpy.frombuffer()如何工作的示例>>> binary_string = struct.pack('2f', 1,2)

>>> binary_string

'\x00\x00\x80?\x00\x00\x00@'

>>> numpy.frombuffer(binary_string, dtype=np.dtype('complex64'))

array([ 1.+2.j], dtype=complex64)

>>>

编辑:我不知道numpy.frombuffer()的存在。所以我创建了一个char数组,然后更改了dtype以获得相同的效果。谢谢@wim

编辑2:

至于进一步的速度优化,使用列表理解而不是显式for循环可能会提高性能。在for x in range(dimX):

data[x] = [np.frombuffer(stream.readBytes(8*dimZ), dtype=np.dtype('complex64')) for y in range(dimY)]

但更进一步:data = [[np.frombuffer(stream.readBytes(8*dimZ), dtype=np.dtype('complex64'))

for y in range(dimY)]

for x in range(dimX)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值