Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多维稀疏数组_Python_Scipy - Fatal编程技术网

Python多维稀疏数组

Python多维稀疏数组,python,scipy,Python,Scipy,我正在做一个项目,我需要处理三维大阵列。我使用的是numpy 3d数组,但我的大多数条目都将为零,因此这会浪费大量内存。Scipy稀疏似乎只允许二维矩阵。有没有其他方法可以存储3D稀疏阵列 你是对的;看起来没有现成的工具来处理n维稀疏数组。如果您只需要访问数组中的元素,那么可以使用元组上的字典进行选择。见: 如果您需要在稀疏3d矩阵上执行操作,则会变得更加困难-您可能需要自己进行一些编码。scipy.sparse有多种格式,但只有少数格式有一组有效的数值操作。不幸的是,这些都是很难扩展的 do

我正在做一个项目,我需要处理三维大阵列。我使用的是numpy 3d数组,但我的大多数条目都将为零,因此这会浪费大量内存。Scipy稀疏似乎只允许二维矩阵。有没有其他方法可以存储3D稀疏阵列

你是对的;看起来没有现成的工具来处理n维稀疏数组。如果您只需要访问数组中的元素,那么可以使用元组上的字典进行选择。见:


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

scipy.sparse
有多种格式,但只有少数格式有一组有效的数值操作。不幸的是,这些都是很难扩展的

dok
使用索引元组作为字典键。所以这很容易从2d推广到3d或者更多
coo
具有
数据
属性数组。从概念上讲,添加第三个
深度
(?)很容易
lil
可能需要列表中的列表,这可能会变得混乱

但是
csr
csc
将数组存储在
索引
indptr
数据
数组中。这种格式是数年前由研究线性代数问题的数学家以及高效数学运算(特别是矩阵乘法)制定的。(源代码中引用了相关论文)

因此,表示三维稀疏阵列不是问题,但实现有效的向量运算可能需要一些基础数学研究

你真的需要3d布局来做矢量运算吗?例如,您是否可以将其中的两个维度重新塑造为一个维度,至少暂时是这样

逐元素操作(*、+、-)与展平数组的数据的处理效果与2或3d版本相同
np.tensordot
通过将输入重塑为2D数组并应用
np.dot
来处理nD矩阵乘法。即使在3d阵列上使用
np.einsum
时,乘积总和通常仅在一对维度上(例如“ijk,jl->ikl”)

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


总的来说,我认为与尝试查找/实施真正的3d稀疏操作相比,重塑阵列将加快速度。

我不想使用字典,因为我需要对阵列执行矢量化操作。我不知道他们是否能快速使用字典?在你的问题中添加一些你想要的向量运算的例子。这可能表明哪种稀疏格式是最好的,以及它是否可以被调整。