有没有办法用 numpy 来映射一个大端复数?
Is there a way with numpy to memmap a big-endian complex number?
我正在尝试从格式化为 complex64 但采用大端格式的非常大的文件加载数据。由于它们的大小,我想使用 memmap。我可以像这样将数组加载为 big-endian 浮点数:
arr = np.memmap(fn, dtype='>f4', shape=(M,N,2))
但如果我尝试将其视为复数,它会恢复字节交换,即
arr[m,n,0]+1j*arr[m,n,1] != arr[m,n].view(dtype=np.complex64)
但是
arr[m,n,0]+1j*arr[m,n,1] == arr[m,n].view(dtype=np.complex64).byteswap()
但这会创建数据副本或修改文件。有没有办法在不复制数据或修改现有文件的情况下完成这项工作?
.byteswap() 方法似乎没有修改或复制数据。所以
narr = arr[m,n].view(dtype=np.complex64).byteswap()
是必经之路。希望这对其他人有帮助。
我正在尝试从格式化为 complex64 但采用大端格式的非常大的文件加载数据。由于它们的大小,我想使用 memmap。我可以像这样将数组加载为 big-endian 浮点数:
arr = np.memmap(fn, dtype='>f4', shape=(M,N,2))
但如果我尝试将其视为复数,它会恢复字节交换,即
arr[m,n,0]+1j*arr[m,n,1] != arr[m,n].view(dtype=np.complex64)
但是
arr[m,n,0]+1j*arr[m,n,1] == arr[m,n].view(dtype=np.complex64).byteswap()
但这会创建数据副本或修改文件。有没有办法在不复制数据或修改现有文件的情况下完成这项工作?
.byteswap() 方法似乎没有修改或复制数据。所以
narr = arr[m,n].view(dtype=np.complex64).byteswap()
是必经之路。希望这对其他人有帮助。