我正在开发一个项目,我需要处理3维大阵列。我使用的是numpy 3D数组,但我的大多数条目将为零,因此会造成大量内存浪费。 Scipy稀疏似乎只允许2D矩阵。有没有其他方式可以存储3D稀疏数组?Python多维稀疏阵列
6
A
回答
1
你是对的;它看起来并不像是用于处理n维稀疏数组的工具。如果你只需要访问数组中的元素,那么有些选项使用键入元组的字典。请参阅:
sparse 3d matrix/array in Python?
如果您需要做的三维稀疏矩阵运算,它得到harder-你可能需要做一些编码自己。
4
scipy.sparse
有许多格式,但只有一对有一组有效的数字操作。不幸的是,那些更难以延伸。
dok
使用索引的元组作为字典键。所以这很容易从2d推广到3d或更多。 coo
具有row
,col
,data
属性数组。从概念上讲,添加第三个depth
(?)很容易。 lil
可能需要列表内的列表,这可能会变得混乱。
但是csr
和csc
存储在indices
,indptr
和data
阵列的阵列。这种格式多年前由数学家研究线性代数问题以及高效的数学运算(尤其是矩阵乘法)。 (相关论文在源代码中被引用)。
因此,表示3D稀疏阵列不是问题,但实现高效的矢量运算可能需要一些基础的数学研究。
你真的需要3D布局来做矢量操作吗?例如,您是否可以至少暂时将两个维度重塑为1?
元素操作(*,+, - )与2或3d版本的平展数组数据一样好。 np.tensordot
通过将输入重新整形为二维数组来处理nD矩阵乘法,并应用np.dot
。即使在3d阵列上使用np.einsum
时,产品求和通常仅在一对维度上(例如,'ijk,jl-> ikl')。
3D表示可以在概念上方便,但我无法想象数学运算需要它(而不是2或1d)。
总体而言,我认为从重新定型数组中获得更多的速度,而不是尝试寻找/实现真正的3D稀疏操作。
相关问题
- 1. Julia中的多维稀疏矩阵
- 2. csv稀疏矩阵python
- 3. 多稀疏矩阵与SQL
- 4. 建设稀疏阵列
- 5. 稀疏阵列压缩
- 6. 执行稀疏阵列
- 7. 稀疏矩阵
- 8. 稀疏三元组稀疏矩阵matlab
- 9. Matlab中的稀疏三维矩阵
- 10. 三维稀疏矩阵实现?
- 11. python稀疏矩阵的矩阵功率
- 12. 从稀疏矢量列表创建稀疏矩阵
- 13. 以稀疏矩阵
- 14. 50Kx50K稀疏矩阵
- 15. 稀疏矩阵和矩阵
- 16. 确定稀疏矩阵的稀疏性(Lil矩阵)
- 17. 在Numpy/Python中快速稀疏矩阵
- 18. Python稀疏矩阵非零值交点
- 19. python如何反转稀疏矩阵
- 20. Python中是否支持稀疏矩阵?
- 21. 在Python中创建稀疏矩阵
- 22. Python - 将稀疏矩阵转换为JSON
- 23. 巨大的python稀疏矩阵
- 24. python中的稀疏矩阵svd
- 25. 将二维数组转换为一个稀疏数组阵列
- 26. 稀疏矩阵的多线程程序
- 27. R heatmap稀疏多样的矩阵
- 28. 稀疏与正常阵列Matlab
- 29. Scipy:稀疏矩阵条件去除列
- 30. 稀疏矩阵的列联表
我不想使用字典,因为我需要对数组执行矢量化操作。我不知道他们是否会快速使用字典? – Naman
添加一些你想要的问题向量操作的例子。这可能表明哪种稀疏格式最好,以及它是否可以适应。 – hpaulj