Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.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_Performance_Numpy_Scipy_Sparse Matrix - Fatal编程技术网

Python 确定稀疏矩阵商

Python 确定稀疏矩阵商,python,performance,numpy,scipy,sparse-matrix,Python,Performance,Numpy,Scipy,Sparse Matrix,我希望在python 2.7中划分两个稀疏矩阵,本质上是k=分子/分母,结果是一个类型为sp.csr\u矩阵的稀疏矩阵。我正在使用scipy作为sp和numpy作为np 为了做到这一点,我遵循线性格式,取分子的点积和分母的倒数。这两个项目的格式均为sp.csr_矩阵([],([],[]),形状=[R,R]) k本身的计算是 k = sp.csr_matrix(numerator.dot(sp.linalg.inv(denominator))) 执行此操作将返回警告: SparseEfficie

我希望在python 2.7中划分两个稀疏矩阵,本质上是
k=分子/分母
,结果是一个类型为
sp.csr\u矩阵
的稀疏矩阵。我正在使用
scipy作为sp
numpy作为np

为了做到这一点,我遵循线性格式,取分子的点积和分母的倒数。这两个项目的格式均为
sp.csr_矩阵([],([],[]),形状=[R,R])

k本身的计算是

k = sp.csr_matrix(numerator.dot(sp.linalg.inv(denominator)))
执行此操作将返回警告:

SparseEfficiencyWarning: splu requires CSC matrix format
warn('splu requires CSC matrix format', SparseEfficiencyWarning)
与确定
k
作为两个稀疏矩阵之间商的恒等式相关,上述警告是什么意思

在python中,是否有更有效的方法生成稀疏矩阵和稀疏矩阵逆的点积(两个稀疏矩阵的商)


我以前发现过,但我想知道这是否已经过时。

借用2013年的答案:

In [409]: a=np.random.rand(3,3)
In [410]: A=sparse.csr_matrix(a)
In [411]: np.linalg.inv(a)
Out[411]: 
array([[ 26.11275413,  -4.17749006,  -9.82626551],
       [-37.22611759,   9.38404027,  13.80073216],
       [  7.59314843,  -2.04314605,  -1.58410661]])
np
inv不是
sparse-aware

In [412]: np.linalg.inv(A) 
 ....
LinAlgError: 0-dimensional array given. Array must be at least two-dimensional
使用scipy.sparse import linalg中的

In [414]: linalg.inv(A).A
/usr/lib/python3/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py:243: SparseEfficiencyWarning: splu requires CSC matrix format
  warn('splu requires CSC matrix format', SparseEfficiencyWarning)
/usr/lib/python3/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py:161: SparseEfficiencyWarning: spsolve is more efficient when sparse b is in the CSC matrix format
  'is in the CSC matrix format', SparseEfficiencyWarning)
Out[414]: 
array([[ 26.11275413,  -4.17749006,  -9.82626551],
       [-37.22611759,   9.38404027,  13.80073216],
       [  7.59314843,  -2.04314605,  -1.58410661]])
因此,请使用
csc
格式而不是
csr

In [415]: A1=sparse.csc_matrix(a)
In [416]: linalg.inv(A1).A
Out[416]: 
array([[ 26.11275413,  -4.17749006,  -9.82626551],
       [-37.22611759,   9.38404027,  13.80073216],
       [  7.59314843,  -2.04314605,  -1.58410661]])

同样的事情,但没有稀疏警告。在不详细说明的情况下,
inv
必须使用在列而不是行上迭代的方法。它确实是spsolve(A,I)
I
是一个稀疏的
eye
矩阵)。

借用2013年的答案:

In [409]: a=np.random.rand(3,3)
In [410]: A=sparse.csr_matrix(a)
In [411]: np.linalg.inv(a)
Out[411]: 
array([[ 26.11275413,  -4.17749006,  -9.82626551],
       [-37.22611759,   9.38404027,  13.80073216],
       [  7.59314843,  -2.04314605,  -1.58410661]])
np
inv不是
sparse-aware

In [412]: np.linalg.inv(A) 
 ....
LinAlgError: 0-dimensional array given. Array must be at least two-dimensional
使用scipy.sparse import linalg中的

In [414]: linalg.inv(A).A
/usr/lib/python3/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py:243: SparseEfficiencyWarning: splu requires CSC matrix format
  warn('splu requires CSC matrix format', SparseEfficiencyWarning)
/usr/lib/python3/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py:161: SparseEfficiencyWarning: spsolve is more efficient when sparse b is in the CSC matrix format
  'is in the CSC matrix format', SparseEfficiencyWarning)
Out[414]: 
array([[ 26.11275413,  -4.17749006,  -9.82626551],
       [-37.22611759,   9.38404027,  13.80073216],
       [  7.59314843,  -2.04314605,  -1.58410661]])
因此,请使用
csc
格式而不是
csr

In [415]: A1=sparse.csc_matrix(a)
In [416]: linalg.inv(A1).A
Out[416]: 
array([[ 26.11275413,  -4.17749006,  -9.82626551],
       [-37.22611759,   9.38404027,  13.80073216],
       [  7.59314843,  -2.04314605,  -1.58410661]])

同样的事情,但没有稀疏警告。在不详细说明的情况下,
inv
必须使用在列而不是行上迭代的方法。它确实是spsolve(A,I)
I
是一个稀疏的
eye
矩阵)。

为什么2013年的答案会过时?您是否找到了任何
sparse
inv
函数或讨论?我认为它可能已经过时,因为从那时起,scipy库中的更新创建了一个成员函数,但我找不到该函数。未发现有关稀疏反转的讨论。一条评论指出,
sparse.linalg.inv
正在进行中-这在我的版本中存在。是的,我目前正在dot产品中使用
sp.linalg.inv
,但是,我收到了问题中详细说明的警告,我主要想知道警告是否可能是3小时过去且终端未返回结果的原因……为什么2013年的答案会过时?您是否找到了任何
sparse
inv
函数或讨论?我认为它可能已经过时,因为从那时起,scipy库中的更新创建了一个成员函数,但我找不到该函数。未发现有关稀疏反转的讨论。一条评论指出,
sparse.linalg.inv
正在进行中-这在我的版本中存在。是的,我目前正在dot产品中使用
sp.linalg.inv
,但是我收到了问题中详细的警告,我主要想知道警告是否是3个小时过去了,终端没有返回结果的原因…太好了,谢谢。您能否详细说明使用
csc
csr
的主要区别?我主要使用的是
csr
,因为这是保存遗留代码的格式。
csc
基本上是
csr
的转置。实际上,
M.T
其中
M
csr
,是
csc
,具有相同的数据和指针。查看他们的
数据
索引
indptr
属性。非常有用-我无法快速从
scipy
文档中识别出区别。非常感谢。太好了,谢谢。您能否详细说明使用
csc
csr
的主要区别?我主要使用的是
csr
,因为这是保存遗留代码的格式。
csc
基本上是
csr
的转置。实际上,
M.T
其中
M
csr
,是
csc
,具有相同的数据和指针。查看他们的
数据
索引
indptr
属性。非常有用-我无法快速从
scipy
文档中识别出区别。非常感谢。