gpt4 book ai didi

python - 稀疏矩阵上 hstack 的类型错误

转载 作者:行者123 更新时间:2023-12-01 01:43:56 26 4
gpt4 key购买 nike

我有两个 csr 稀疏矩阵。一个包含来自 sklearn.feature_extraction.text.TfidfVectorizer 的转换,另一个包含从 numpy 数组转换而来的转换。我试图对两者进行 scipy.sparse.hstack 来增加我的特征矩阵,但我总是收到错误:

TypeError: 'coo_matrix' object is not subscriptable

下面是代码:

vectorizer = TfidfVectorizer(analyzer="char", lowercase=True, ngram_range=(1, 2), strip_accents="unicode")
ngram_features = vectorizer.fit_transform(df["strings"].values.astype(str))

list_other_features = ["entropy", "string_length"]
other_features = csr_matrix(df[list_other_features].values)

joined_features = scipy.sparse.hstack((ngram_features, other_features))

两个特征矩阵都是 scipy.sparse.csr_matrix 对象,我也尝试过不转换 other_features,将其保留为 numpy.array ,但结果相同错误。

Python 包版本:

numpy == 1.13.3
pandas == 0.22.0
scipy == 1.1.0

我无法理解为什么在这种情况下它谈论的是 coo_matrix 对象,特别是当我将两个矩阵都转换为 csr_matrix 时。查看 scipy 代码,我知道如果输入矩阵是 csr_matrix 对象,它不会进行任何转换。

最佳答案

scipy.sparse.hstack的源代码中,它调用 bmat ,如果未建立快速路径情况,它可能将矩阵转换为coo_matrix

<小时/>

诊断

Looking at the scipy code I understand it will not do any conversion if the input matrices are csr_matrix objects.

batsource code 中,除了两个矩阵都是csr_matrix之外,实际上还有更多的条件才不会变成coo_matrix对象。查看源码,需要满足以下2个条件之一

# check for fast path cases
if (N == 1 and format in (None, 'csr') and all(isinstance(b, csr_matrix)
for b in blocks.flat)):
...
elif (M == 1 and format in (None, 'csc')
and all(isinstance(b, csc_matrix) for b in blocks.flat)):
...

之前line 573 A = coo_matrix(blocks[i,j]) 被调用。

<小时/>

建议

要解决此问题,我建议您再检查一次,看看您是否满足 csr_matrixcsc_matrix 的快速路径情况(上面列出的两个条件) )。请参阅 bat 的完整源代码以获得更好的理解。如果不满足条件,您将被转发将矩阵转换为coo_matrix

关于python - 稀疏矩阵上 hstack 的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51592831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com