Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 将外部产品的3D numpy数组存储到块对角稀疏矩阵中_Python_Arrays_Numpy_Matrix - Fatal编程技术网

Python 将外部产品的3D numpy数组存储到块对角稀疏矩阵中

Python 将外部产品的3D numpy数组存储到块对角稀疏矩阵中,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有一个大小为1000 x 100的numpy数组C。我已经知道了如何计算它的换位行的外积矩阵 这将生成一个1000x100x100 numpy数组D。我想将每个D[I,:,:]存储为大小为1000*100^2 x 1000*100^2的稀疏矩阵的块对角线之一。我可以使用scipy.sparse.block_diag实现这一点 E=spsppar.block_diag(D,“lil”) 我想知道是否有一种更有效的方法来做到这一点。E的一些条目首先需要被操纵(因此是“lil”)。所得矩阵将用于求

我有一个大小为1000 x 100的numpy数组C。我已经知道了如何计算它的换位行的外积矩阵

这将生成一个1000x100x100 numpy数组D。我想将每个D[I,:,:]存储为大小为1000*100^2 x 1000*100^2的稀疏矩阵的块对角线之一。我可以使用scipy.sparse.block_diag实现这一点

E=spsppar.block_diag(D,“lil”)

我想知道是否有一种更有效的方法来做到这一点。E的一些条目首先需要被操纵(因此是“lil”)。所得矩阵将用于求解稀疏线性系统序列


提前感谢。

您的代码在我的机器上运行不到五秒钟,似乎运行正常。你对效率的要求/目标是什么?我需要迭代求解y=(E+Q(k))*xk'是一个迭代索引,Q(k)是另一个非常稀疏的矩阵。在我的机器上,代码也只需不到5秒钟。我希望它会更快。与解决方案时间相比,构建
E
的时间是多少<代码>稀疏非常擅长转换格式以适应操作。例如,计算可能是通过
csr
完成的。您还可以计算在不同格式之间转换所需的时间。
block_diag
的默认值是
coo
coo
到csr的速度很快。从
lil
到/从
lil
的速度较慢。我尝试过简化
block_diag
,但只得到了30-40%的加速。我想知道是否有一种方法可以从D计算E+Q(k),而不实际构造E,也许是通过巧妙的索引技巧。如果是这样的话,这可能要快得多。