【发布时间】:2017-05-17 12:42:27
【问题描述】:
对于我的研究,我正在处理由复杂数据组成的大型 numpy 数组。
arr = np.empty((15000, 25400), dtype='complex128')
np.save('array.npy'), arr)
存储时,它们每个大约 3 GB。加载这些数组是一个耗时的过程,这让我想知道是否有办法加快这个过程
我想到的一件事是将数组拆分为复杂的实数部分:
arr_real = arr.real
arr_im = arr.imag
并分别保存每个部分。但是,这似乎并没有显着提高处理速度。有一些关于处理大型数组的文档,但我没有找到太多关于处理复杂数据的信息。是否有更聪明的方法来处理大型复杂数组?
【问题讨论】:
-
如果您有很多
0(~70+%),您可以将real和image部分分别保存(使用float64dtype)作为sparse 数组 - 这将显着减少这些数组在内存和磁盘上的大小 -
向/从磁盘写入或加载 3GB 需要一段时间,通常没有真正的解决方法。但是,根据数据有两种可能性:1. 如果数据包含许多零,您可以使用sparse representation(如上所述)。 2. 如果数据高度结构化,compression 可能会缓解 i/o 瓶颈。
-
感谢您的回答。不幸的是,数据由雷达图像组成,它们不是稀疏或结构化的。我将尝试用不同的方式保存和加载数组。
-
@kwant 图像通常非常适合压缩,但我猜雷达图像嘈杂,这可能是个问题。你试过了吗?我会对结果感兴趣。
标签: python arrays numpy complex-numbers memory-efficient