【发布时间】:2017-10-14 20:51:35
【问题描述】:
我有一个进程在 Python 2.7 中使用 multiprocessing 批量执行,并生成大致如下大小的 numpy float64 数组:
- 尺寸A:12
- 尺寸B:2000
- 尺寸C:89
现在它们在每个批次中进行处理,并通过一些统计分析进行浓缩。这是可管理的(12 × 2000 × 89 × 8 字节/浮点数 = 大约 17MB)但我想对我的整个数据集进行一些分析。
我需要以某种方式将 B 维上的批次连接到至少 1000000 的大小,这意味着 8.5GB,然后将它们拆分到 C 维中以分别分析每个 AxB 二维矩阵。 (对于沿维度 C 的每个元素,12x1000000 “仅”为 96MB,这更易于管理。)但我的系统上没有那么多内存,可能需要达到 2000000 或 4000000。
有没有办法在磁盘上进行连接和切片,所以我不需要将整个矩阵放在内存中?
【问题讨论】:
-
您可以使用
numpy.memmap,但磁盘访问模式可能效率很低。 (不过,如果您在内存中执行此操作,内存访问模式也可能非常低效。) -
不要忘记“购买更多 RAM”选项,这通常很合理。
-
我不记得这是否可能,但
h5py提供了一个非常类似于 numpy 的磁盘数据视图。你也许可以完成这项工作...... -
34GB RAM(+ 额外的保证金)以支持 4000000,但我的笔记本电脑“仅”允许最大 16GB,这是在通过我们的公司 I/S 部门之后:/不,谢谢
-
@mgilson 呵呵我想知道 pytables 是否可以做到这一点
标签: python arrays python-2.7 numpy memory