考虑以下示例:
import numpy as np
import scipy.sparse
A = scipy.sparse.csr_matrix((2,2))
b = A.sum(axis=0)
矩阵b
现在具有以下形式
matrix([[ 0., 0.]])
但是,我希望它成为这样的数组:
array([ 0., 0.])
这可以通过 b = np.asarray(b)[0]
来完成,但这看起来不太优雅,特别是与 MATLAB 的 b(:)
相比。有没有更优雅的方法来做到这一点?
最佳答案
b.A1
可以完成这项工作。
In [83]: A
Out[83]:
<2x2 sparse matrix of type '<class 'numpy.float64'>'
with 0 stored elements in Compressed Sparse Row format>
In [84]: A.A
Out[84]:
array([[ 0., 0.],
[ 0., 0.]])
In [85]: b=A.sum(axis=0)
In [86]: b
Out[86]: matrix([[ 0., 0.]])
In [87]: b.A1
Out[87]: array([ 0., 0.])
In [88]: A.A.sum(axis=0) # another way
Out[88]: array([ 0., 0.])
您可以对此进行投票,或在此处添加到我最赚钱的答案:Numpy matrix to array :)
A
是一个稀疏矩阵。稀疏求和是通过矩阵乘积(适当的 1 矩阵)来执行的。结果是一个稠密矩阵。
稀疏矩阵有一个 toarray()
方法,带有 .A
快捷方式。
密集矩阵也有这些,但它也有一个 .A1
(记录很少 - 因此我所有的点击),它也变平。
A1
的文档:
Return `self` as a flattened `ndarray`.
Equivalent to ``np.asarray(x).ravel()``
事实上代码是
return self.__array__().ravel()
====================
MATLAB b(:)
真的等价吗?
A(:) is all the elements of A, regarded as a single column.
如果我没看错的话,numpy
的等价物是转置,或者 b.ravel().T
。形状为 (2,1)。但在 MATLAB 中,列矩阵是最简单的矩阵形式。
In [94]: b.T
Out[94]:
matrix([[ 0.],
[ 0.]])
(我是一位老 MATLAB 程序员,我的备用计算机上装有 Octave。并且在一些旧 Windows 磁盘上有 3.5 的副本。:) )。
关于python - 如何将 scipy 行矩阵转换为 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405047/