【问题标题】:Linkage matrix value error: setting an array element with a sequence链接矩阵值错误:使用序列设置数组元素
【发布时间】:2017-05-28 04:18:30
【问题描述】:

enter image description here我正在使用 Python、numpy 和 scipy 对我为文本分析创建的主题模型的输出进行一些层次聚类。

我将我的 testcorpus 应用到了 ldamodel,所以它变成了一个词袋表示。然后我把它变成了一个矩阵。现在我想使用 scipy 来制作我的矩阵的链接矩阵。但它给出了值错误:使用序列设置数组元素。 我猜这是因为只能聚集形状相同的数组。而且我的矩阵在列表列表中的列表之间存在长度差异。 我只是现在不知道如何解决这个问题。 这是代码的一小部分。我不知道它是否有帮助。我只是真的希望有人能帮助我。

  import numpy as np
  X = np.array(corpus)
  from matplotlib import pyplot as plt  
  from scipy.cluster.hierarchy import dendrogram, linkage
  Z = linkage(X, 'cosine') 

【问题讨论】:

  • 当您提出此类问题时,您需要确定问题所在行,并告诉我们有关该行的输入、数组或其他方面的信息。看看我最近对另一个同样错误的问题的回答,stackoverflow.com/questions/41621340/…。在您的案例中,一个关键问题是第一行还是最后一行的问题?
  • 您好,感谢您的评论。我在编程方面很新(语言系学生,对 Python 有过介绍)。这听起来可能是个愚蠢的问题,但能否帮助我找出问题所在?
  • @hpaulj ,哦,错误发生在最后一行: Z = links(X, 'cosine') 。我可以毫无问题地打印矩阵 X,但给出错误的是 Z。
  • 我在帖子中添加了代码图片

标签: python arrays numpy matrix hierarchical-clustering


【解决方案1】:

正如您提到的从 lda 模型获取矩阵 X,它可能是某种稀疏矩阵。您可以通过X.todense() 转换为密集矩阵并应用linkage 方法。如果矩阵太大而无法保存在内存中,您可以这样做 Z=linkage(X.todense(),distance='cosine').

在某些情况下,更改矩阵的dtype 会有所帮助。

P.S:我也遇到了同样的问题,将我的稀疏特征矩阵(scipy.sparse.csr 矩阵)转换为密集的解决了这个问题。

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2018-08-15
    • 1970-01-01
    • 2016-10-30
    • 2016-01-01
    • 2015-08-10
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多