python - 如何将 scipy 行矩阵转换为 numpy 数组

标签 python numpy scipy

考虑以下示例:

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/

相关文章:

python - 在python中动态构建随机变量的函数

Python JSON解码报错TypeError : can't use a string pattern on a bytes-like object

python - Sklearn 数据集

python - 分割后将颜色空间从 RGB 更改为 HSV(OpenCv Python)

python - 构建 numpy 数组的列 - 为什么第一列仍然全是零?

用于扩展图像的 Python 函数(NumPy 数组)

python - scipy.interpolate.Rbf 的意外结果

python - celery 抛出长错误信息

python - 为什么我在插入 MySQL 数据库时会收到此 UnicodeEncodeError?

python - 使用 scipy.stats.hypergeom 从 SciPy 中的牌组绘制卡片