Python 中应该如何处理非常大但高度对称的数组?

问题描述 投票:0回答:1

我正在尝试填充和存储包含约 1 万亿个条目的 NumPy 数组,并稍后检索数据。该数组有约 50 个维度和约 7 个索引,即它是 50 维的 7 阶张量或形状数组 (50,50,50,50,50,50,50)。然而,数据是完全对称的,这意味着数组的大部分是冗余的。具体来说,每当索引重复时,元素就是 0,并且通过任何索引排列相关的元素始终相等。这意味着只有 50-choose-7 或 ~1 亿个独特的非零元素。

问题是我缺乏 RAM 来初始化一个足够大的空数组来存储数据。我当然可以处理只有 1 亿个条目的数组,但我不知道如何去做。

我有很强的数学背景,但我对编程相当缺乏经验。我知道应该有办法使用硬盘内存来补充RAM,但我确信我无论如何都没有磁盘空间来容纳溢出。我确信可能有一个数学技巧可以将大的对称矩阵与较小的非对称矩阵联系起来,但我在任何地方都找不到任何相关信息。我还猜测有一种方法可以使用稀疏矩阵数据结构来解决 RAM 限制,以便程序知道我不需要提前完成所有事情,但我不明白我发现的大部分内容关于这一点——在我看来,我发现的稀疏矩阵应用程序并不适用于这种情况。

我怀疑我的经验不足导致我在搜索中使用了错误的术语,并误解了我找到的解决方案。

那么在 Python 中管理此类数据的最佳方法是什么?

python numpy multidimensional-array sparse-matrix large-data
1个回答
0
投票

利用这个问题的对称性。 定义一个函数

def hash(dims, indices):

始终返回小于 1e8 的非负整数。

访问 numpy 数组时,始终通过哈希函数执行此操作, 所以我们存储的不同条目少于 1e8 个。 到那时它可能并不重要 底层 numpy 存储是稀疏还是密集。

© www.soinside.com 2019 - 2024. All rights reserved.