按原样在稀疏矩阵上调用 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 函数时必须谨慎。如果该函数试图将其转换为数组(就像列表一样),它将无法工作。如果它只是将任务委托给对象的方法,它可能会。
> 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 函数时必须谨慎。如果该函数试图将其转换为数组(就像列表一样),它将无法工作。如果它只是将任务委托给对象的方法,它可能会。