按原样在稀疏矩阵上调用 np.asarray() 会返回什么?

What is returned by np.asarray() called on a sparse matrix as-it-is?

> import scipy
> import numpy as np
> smat_csr = scipy.sparse.csr_matrix([[0,0,1],[0,1,0],[0,0,0]])
> print(smat_csr)

(0, 2)  1
(1, 1)  1

> print(smat_csr.shape)

(3, 3)

> smat_np = np.asarray(smat_csr)
> print(type(smat_np))

<class 'numpy.ndarray'>

所以smat_np看起来像一个numpy的数组.....

> print(smat_np.shape)

()

嗯...它的形状 属性 是一个空元组!

> print(smat_np)

(0, 2)  1
(1, 1)  1

看来还是稀疏....

问题:当我们按原样将稀疏矩阵作为参数传递时,np.asarray 返回的对象是什么类型的对象?

免责声明:我知道我可以使用 .todense()

将稀疏矩阵转换为密集矩阵

对于 numpy 来说,稀疏矩阵只是一个 Python 对象,因此它 returns 是一个单一元素,0d,对象 dtype 数组。它不进行任何类型的转换。您必须使用稀疏方法,例如 toarray(或简称 .A`)来创建一个 numpy 数组。

这意味着在将稀疏矩阵传递给 numpy 函数时必须谨慎。如果该函数试图将其转换为数组(就像列表一样),它将无法工作。如果它只是将任务委托给对象的方法,它可能会。