我有两个csr稀疏矩阵。一个包含来自sklearn.feature_extraction.text.TfidfVectorizer
的转换,另一个包含从numpy数组转换的转换。我试图对这两个元素做一个scipy.sparse.hstack
来增加我的特性矩阵,但是我总是得到错误:
TypeError: 'coo_matrix' object is not subscriptable
代码如下:
^{pr2}$这两个特征矩阵都是scipy.sparse.csr_matrix
对象,我也尝试过不转换其他特征,将其保留为numpy.array
,但结果是相同的。在
Python包版本:
numpy == 1.13.3
pandas == 0.22.0
scipy == 1.1.0
我不明白为什么在这个例子中它在谈论coo_matrix
对象,特别是当我把两个矩阵都转换成csr_matrix
时。看看scipy代码,我明白如果输入矩阵是csr_matrix
对象,它将不会进行任何转换。在
在^{} 的源代码中,它调用^{} ,如果没有建立快速路径用例,它在其中可能将矩阵转换为
coo_matrix
。在诊断
在
bat
的source code中,除了两个矩阵是csr_matrix
之外,实际上还有更多的条件,才能使它变成coo_matrix
对象。看到源代码,需要满足以下两个条件之一在要调用的line 573
A = coo_matrix(blocks[i,j])
之前。在建议
为了解决这个问题,我建议您再检查一下是否满足}(上面列出的两个条件)的快速路径情况。请查看
csr_matrix
或{bat
的完整源代码以获得更好的理解。如果不满足条件,则会将您转发到将矩阵转换为coo_matrix
。在不清楚这个错误是在
hstack
中还是在使用结果之后发生。在如果它在
hstack
中,您需要提供一个回溯,这样我们就可以看到发生了什么。在hstack
,使用bmat
,通常收集所有输入的coo
属性,并将它们组合成一个新的coo
矩阵。所以不管输入(除了特殊情况),结果都是coo
。但是hstack
也接受一个fmt
参数。在或者您可以添加
.tocsr()
。如果矩阵已经是csr
,就没有额外的成本。在相关问题 更多 >
编程相关推荐