type(A)
<class 'scipy.sparse.csc.csc_matrix'>
A.shape
(8529, 60877)
print A[0,:]
(0, 25) 1.0
(0, 7422) 1.0
(0, 26062) 1.0
(0, 31804) 1.0
(0, 41602) 1.0
(0, 43791) 1.0
print A[1,:]
(0, 7044) 1.0
(0, 31418) 1.0
(0, 42341) 1.0
(0, 47125) 1.0
(0, 54376) 1.0
print A[:,0]
#nothing returned
现在我不明白的是A[1,:]
应该从第2行中选择元素,而我却通过print A[1,:]
从第1行中获取元素。另外,print A[:,0]
应该返回第一列,但我什么也没打印出来。为什么?
5条答案
按热度按时间4si2a6ki1#
A[1,:]
本身是一个稀疏矩阵,其形状为(1,60877)。This 是您要打印的内容,它只有一行,因此所有行坐标都是0。例如:
您可以选择列,但如果列中没有非零元素,则使用
print
输出时不显示任何内容:最后一个
print
调用没有显示输出,因为列a[:, 1]
没有非零元素。3z6pesqy2#
要使用与问题详细信息不同的技术回答标题问题:
csc_matrix
提供了.nonzero()
方法。给定:
您可以通过以下方式访问指向非零数据的索引:
然后,您可以使用它来访问数据,而无需创建稀疏矩阵的密集版本:
nfg76nw03#
如果是用
TfidfTransformer
计算TFIDF分数,你可以通过tfidf.idf_
得到IDF,那么稀疏数组名,比如'a',a.toarray().
toarray
返回ndarray;todense
返回一个矩阵。如果需要矩阵,请使用todense
;否则,使用toarray
。nszi6y054#
我完全承认所有其他给出的答案。这只是一个不同的方法。
为了演示这个例子,我创建了一个新的稀疏矩阵:
输出:
为了方便访问,就像访问列表一样,我将其转换为列表。
输出:
这看起来可能很愚蠢,因为我创建了一个稀疏矩阵并将其转换回来,但是有一些函数,如**TfidfVectorizer**和其他函数,会返回一个稀疏矩阵作为输出,处理它们可能会很棘手,这是从稀疏矩阵中提取数据的一种方法。
c0vxltue5#
这个领域起步较晚,但对于那些寻找一种方法来索引稀疏csr或csc矩阵元素的人来说,可以将非零行、列和数据数组转换为panda Dataframe ,并从矩阵的数据属性中提取元素,这种简单的技术不需要转换为密集数组。
让我们创建稀疏数组。
产出
下面的函数接受稀疏csr或csc矩阵,以及所需的非零行和列索引。
索引到A[3,2]:
输出:37.0