【问题标题】:sparse matrix calculations in scipyscipy中的稀疏矩阵计算
【发布时间】:2014-10-11 14:26:27
【问题描述】:

抱歉新手问题。我正在学习使用 scipy.sparse ,但我不知道为什么这段代码不起作用。尺寸正确但无法计算减法:

c=(count_mat[i]) # c is the ith row of the sparse csr matrix count_mat, it has d #                      elements
l=c.sum()
second_mnt+=(1/(l*(l-1)))*((c.T*c)-spdiags(c,0,d,d))

无法计算 2 d*d 稀疏矩阵之间的减法。

编辑: 错误恰好在计算 second_mnt 的行中。所以很难认为它与两个矩阵之间的减法无关。这是完整的回溯:

Traceback (most recent call last):
  File "C:/Users/hfjrk/PycharmProjects/Project/my_code_1.py", line 28, in <module>
    second_mnt+=(1/(l*(l-1)))*((c.T*c)-sparse.spdiags(c,0,d,d))
  File "C:\Python27\lib\site-packages\scipy\sparse\compressed.py", line 366, in __sub__
    return self._binopt(other,'_minus_')
  File "C:\Python27\lib\site-packages\scipy\sparse\compressed.py", line 1039, in _binopt
    other = self.__class__(other)
  File "C:\Python27\lib\site-packages\scipy\sparse\compressed.py", line 31, in __init__
    arg1 = arg1.asformat(self.format)
  File "C:\Python27\lib\site-packages\scipy\sparse\base.py", line 213, in asformat
    return getattr(self,'to' + format)()
  File "C:\Python27\lib\site-packages\scipy\sparse\dia.py", line 237, in tocsc
    return self.tocoo().tocsc()
  File "C:\Python27\lib\site-packages\scipy\sparse\coo.py", line 313, in tocsc
    indptr, indices, data)
TypeError: Cannot cast array data from dtype('O') to dtype('bool') according to the rule 'safe'

【问题讨论】:

  • "无法计算 2 d*d 稀疏矩阵之间的减法" 你有错误吗?请显示完整的回溯。如果您尽可能简化代码,这将有所帮助。例如。如果您认为错误在于减法,请摆脱除减法之外的所有其他内容。
  • 什么是second_mnt?它是否正确计算右侧的表达式?换句话说,让我们确定+= 是否是问题所在。
  • 好吧,我将计算 second_mnt 的行分成两行。首先我将减法计算为变量 temp 然后下一行: second_mnt+=(1/(l*(l-1)))*temp/ 但错误仍然在计算 temp 的行中,表明它与减法有关。

标签: python-2.7 numpy scipy sparse-matrix


【解决方案1】:

我在与所述 P>的问题

spdiags(c,0,d,d)

术语。它产生一个矩阵,它转换为coo就好了。但抛出一个错误,当.todensetocsr。其data是一个对象,而不是一个号码或阵列。 P>

试试这个:

sparse.spdiags(c.A,0,4,4)

在换句话说,data参数为spdiags应该是一个列表或numpy的阵列,而不是稀疏矩阵。 P>

【讨论】:

  • 谢谢,即解决了错误。看来spdiags不接受稀疏数组作为输入或至少在我给它的方式。转换c键致密并将它传递给spdiags解决的问题,因为你建议。跨度>
猜你喜欢
  • 2018-06-04
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2017-03-31
  • 2023-04-10
相关资源
最近更新 更多