有没有办法用 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()

是必经之路。希望这对其他人有帮助。