首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多维稀疏数组

Python多维稀疏数组
EN

Stack Overflow用户
提问于 2015-04-26 06:57:35
回答 2查看 8.5K关注 0票数 13

我正在从事一个项目,其中我需要处理3维大型数组。我使用numpy 3d数组,但我的大多数条目都将是零,所以这是大量的内存浪费。Scipy sparse似乎只允许2D矩阵。有没有其他方法可以存储3D稀疏数组?

EN

回答 2

Stack Overflow用户

发布于 2015-04-27 05:24:08

scipy.sparse有许多格式,但只有几种格式有一组有效的数字操作。不幸的是,这些是更难扩展的。

dok使用索引的元组作为字典键。因此,这很容易从2d推广到3d或更多。coorowcoldata属性数组。从概念上讲,添加第三个depth(?)很简单。lil可能需要列表中的列表,这可能会变得混乱。

但是csrcsc将数组存储在indicesindptrdata数组中。这种格式是几年前由处理线性代数问题的数学家以及有效的数学运算(特别是矩阵乘法)制定出来的。(相关论文在源代码中引用)。

因此,表示3d稀疏数组不是问题,但实现有效的向量操作可能需要一些基础的数学研究。

你真的需要3d布局来做矢量操作吗?例如,你可以至少暂时地将2个维度重塑为1个维度吗?

逐个元素的操作(*,+,-)与2或3d版本一样适用于平面化数组的数据。np.tensordot通过将输入重塑为2D数组并应用np.dot来处理nD矩阵乘法。即使在3d数组上使用np.einsum,乘积和通常也只超过一对维度(例如'ijk,jl->ikl')

3D表示在概念上可能很方便,但我想不出需要它的数学运算(而不是2或1维)。

总体而言,我认为,与尝试查找/实现真正的3d稀疏操作相比,重塑数组可以获得更快的速度。

票数 6
EN

Stack Overflow用户

发布于 2015-04-26 07:54:27

您说得对;看起来还没有成熟的工具来处理n维稀疏数组。如果您只需要访问数组中的元素,则可以选择使用以元组为关键字的字典。请参见:

sparse 3d matrix/array in Python?

如果您需要对稀疏3d矩阵进行操作,则会变得更加困难-您可能需要自己进行一些编码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29871669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档