我还处理许多复杂的整数数据,通常是基带数据。我用
dtype = np.dtype([('re', np.int16), ('im', np.int16)])它不是完美的,但是可以充分描述数据。我将其用于加载到内存中,而不会增加数据大小。它还具有能够通过HDF5透明加载和存储的优点。
DATATYPE H5T_COMPOUND { H5T_STD_I16LE "re"; H5T_STD_I16LE "im";}使用它很简单,只是有所不同。
x = np.zeros((3,3),dtype)x[0,0]['re'] = 1x[0,0]['im'] = 2x>> array([[(1, 2), (0, 0), (0, 0)],>> [(0, 0), (0, 0), (0, 0)],>> [(0, 0), (0, 0), (0, 0)]], >> dtype=[('re', '<i2'), ('im', '<i2')])为了进行数学运算,我将其转换为本机复杂的float类型。显而易见的方法行不通,但也不难。
y = x.astype(np.complex64) # doesn't work, only gets the real party = x['re'] + 1.j*x['im'] # works, but slow and bigy = x.view(np.int16).astype(np.float32).view(np.complex64)y>> array([[ 1.+2.j, 0.+0.j, 0.+0.j],>> [ 0.+0.j, 0.+0.j, 0.+0.j],>> [ 0.+0.j, 0.+0.j, 0.+0.j]], dtype=complex64)
最后一种转换方法受https://stackoverflow.com/a/5658446/1784179启发



