HOME> 装扮工坊> 为什么压缩不工作在稀疏数组上?
{$vo.文章标题}
{$vo.文章标题}

为什么压缩不工作在稀疏数组上?

admin
4056

代码语言:javascript复制In [1]: from scipy import sparse

In [2]: x = np.eye(3)

In [3]: x

Out[3]:

array([[1., 0., 0.],

[0., 1., 0.],

[0., 0., 1.]])

In [4]: x.shape

Out[4]: (3, 3)

In [5]: xs = sparse.eye(3)

In [6]: xs

Out[6]:

<3x3 sparse matrix of type ''

with 3 stored elements (1 diagonals) in DIAgonal format>

In [7]: print(xs)

(0, 0) 1.0

(1, 1) 1.0

(2, 2) 1.0

In [8]: xs.shape

Out[8]: (3, 3)np和生成一个数组,其维数少一个(除非使用keepdims参数)

代码语言:javascript复制In [9]: x.sum(axis=1)

Out[9]: array([1., 1., 1.])稀疏和产生一个np.matrix对象。

代码语言:javascript复制In [10]: xs.sum(axis=1)

Out[10]:

matrix([[1.],

[1.],

[1.]])

In [11]: _.shape

Out[11]: (3, 1)根据定义,np.matrix始终是2d。但是它确实有一个A1属性,它将转换为ndarray并应用挤压。

代码语言:javascript复制In [12]: xs.sum(axis=1).A1

Out[12]: array([1., 1., 1.])

稀疏实际上通过矩阵乘法执行行或列和:

代码语言:javascript复制In [21]: xs*np.matrix(np.ones((3,1)))

Out[21]:

matrix([[1.],

[1.],

[1.]])稀疏矩阵* np.matrix产生np.matrix

如果sum使用ndarray,结果将是一个ndarray,并且是可压缩的。

代码语言:javascript复制In [22]: xs*np.ones((3,1))

Out[22]:

array([[1.],

[1.],

[1.]])注意,我使用了* (我本可以使用@);乘法(例如,点)的稀疏定义具有优先权。

代码语言:javascript复制In [23]: np.matrix(np.ones((1,3)))*xs

Out[23]: matrix([[1., 1., 1.]])