AttributeError: 'numpy.ndarray' object has no attribute 'A'
AttributeError: 'numpy.ndarray' object has no attribute 'A'
我正在尝试对矩阵执行 tfidf。我想使用 gensim,但是 models.TfidfModel()
只适用于语料库,因此 returns 一个不同长度的列表列表(我想要一个矩阵)。
选项是以某种方式填充列表列表的缺失值,或者只是将语料库转换为矩阵
numpy_matrix = gensim.matutils.corpus2dense(corpus, num_terms=number_of_corpus_features)
选择后者,然后我尝试将此计数矩阵转换为 tf-idf 加权矩阵:
def TFIDF(m):
#import numpy
WordsPerDoc = numpy.sum(m, axis=0)
DocsPerWord = numpy.sum(numpy.asarray(m > 0, 'i'), axis=1)
rows, cols = m.shape
for i in range(rows):
for j in range(cols):
amatrix[i,j] = (amatrix[i,j] / WordsPerDoc[j]) * log(float(cols) / DocsPerWord[i])
但是,我收到错误 AttributeError: 'numpy.ndarray' object has no attribute 'A'
我从另一个脚本复制了上面的函数。它是:
def TFIDF(self):
WordsPerDoc = sum(self.A, axis=0)
DocsPerWord = sum(asarray(self.A > 0, 'i'), axis=1)
rows, cols = self.A.shape
for i in range(rows):
for j in range(cols):
self.A[i,j] = (self.A[i,j] / WordsPerDoc[j]) * log(float(cols) / DocsPerWord[i])
我认为这是它从中获取 A
的地方。但是,我重新导入了该功能。
为什么会这样?
self.A
是 np.matrix
或 sparse
矩阵。对于这两个 A
的意思,return 的副本是 np.ndarray
。换句话说,它将二维矩阵转换为常规的 numpy 数组。如果 self
已经是一个数组,它会产生你的错误。
您似乎已经使用自己的 TFIDF
版本更正了这一点 - 除了使用 2 个变量,m
和 amatrix
而不是 self.A
。
我认为您需要更多地查看错误消息和堆栈,以确定 .A
的位置。还要确保您了解代码在哪里需要矩阵,尤其是稀疏矩阵。以及您自己的代码在这方面是否有所不同。
我从其他 SO 问题中回想起,其中一个学习包已切换到使用稀疏矩阵,并且需要将 .todense()
添加到他们的一些代码(预期是密集矩阵)。
我正在尝试对矩阵执行 tfidf。我想使用 gensim,但是 models.TfidfModel()
只适用于语料库,因此 returns 一个不同长度的列表列表(我想要一个矩阵)。
选项是以某种方式填充列表列表的缺失值,或者只是将语料库转换为矩阵
numpy_matrix = gensim.matutils.corpus2dense(corpus, num_terms=number_of_corpus_features)
选择后者,然后我尝试将此计数矩阵转换为 tf-idf 加权矩阵:
def TFIDF(m):
#import numpy
WordsPerDoc = numpy.sum(m, axis=0)
DocsPerWord = numpy.sum(numpy.asarray(m > 0, 'i'), axis=1)
rows, cols = m.shape
for i in range(rows):
for j in range(cols):
amatrix[i,j] = (amatrix[i,j] / WordsPerDoc[j]) * log(float(cols) / DocsPerWord[i])
但是,我收到错误 AttributeError: 'numpy.ndarray' object has no attribute 'A'
我从另一个脚本复制了上面的函数。它是:
def TFIDF(self):
WordsPerDoc = sum(self.A, axis=0)
DocsPerWord = sum(asarray(self.A > 0, 'i'), axis=1)
rows, cols = self.A.shape
for i in range(rows):
for j in range(cols):
self.A[i,j] = (self.A[i,j] / WordsPerDoc[j]) * log(float(cols) / DocsPerWord[i])
我认为这是它从中获取 A
的地方。但是,我重新导入了该功能。
为什么会这样?
self.A
是 np.matrix
或 sparse
矩阵。对于这两个 A
的意思,return 的副本是 np.ndarray
。换句话说,它将二维矩阵转换为常规的 numpy 数组。如果 self
已经是一个数组,它会产生你的错误。
您似乎已经使用自己的 TFIDF
版本更正了这一点 - 除了使用 2 个变量,m
和 amatrix
而不是 self.A
。
我认为您需要更多地查看错误消息和堆栈,以确定 .A
的位置。还要确保您了解代码在哪里需要矩阵,尤其是稀疏矩阵。以及您自己的代码在这方面是否有所不同。
我从其他 SO 问题中回想起,其中一个学习包已切换到使用稀疏矩阵,并且需要将 .todense()
添加到他们的一些代码(预期是密集矩阵)。