如何基于排列生成大数组

2024-10-03 02:33:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在生成一个非常大的基于数字0,1和2的排列矩阵。理想情况下,我希望他们48宽,但即使与20满意。现在,我的内存不足,所以想看看是否有一个非内存的选项可用。你知道吗

我确实在一个大内存机器上尝试过,但我更喜欢使用磁盘的选项(我有一个快速的SSD),即使它需要很长时间。正如你所看到的,我已经把它改成了int8而不是int32来节省一些空间,但即使这样也只能做到这一点。18的网格大小是6.5克,19是21克,所以我知道它是指数增长的,我很快就会变成TB。你知道吗

import numpy as np

class LargeGrid():
    def permgrid(self, m, n):
        inds = np.indices((m,) * n, dtype=np.int8)
        arr = inds.reshape(n, -1).T
        arr[arr == 2] = -1
        return arr

    def save(self):
        grid_size = 24
        grid = self.permgrid(3,grid_size)
        np.save('grid', grid)

lg = LargeGrid()
lg.save()

期望磁盘上有一个非常大的文件,但结果是:

Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)] on win32
MemoryError: Unable to allocate array with shape (24, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) and data type int8

Tags: 内存selfsizesavedef选项np磁盘
1条回答
网友
1楼 · 发布于 2024-10-03 02:33:59

看起来你的问题是数组太大了。所以,制作更小的数组,并使用^{}将它们写入到和hdf5(层次数据格式)文件中。你知道吗

这将允许您管理当前数组从内存占用的空间量,同时能够将整个大数组存储在文件系统的hdf5文件(largefile.h5)中。你知道吗

或者,也可以使用^{}而不是h5py以hdf5文件格式存储数据。你知道吗

参考文献

我鼓励你看看这些:

h5py

  1. Input and output numpy arrays to h5py
  2. ^{} Intro
  3. ^{} Documentation

表格

  1. Python: how to store a numpy multidimensional array in PyTables?
  2. ^{} Documentation
  3. Example of storing ^{} array using ^{}

相关问题 更多 >