【问题标题】:dot routine for scipy.sparse matrices produces errorscipy.sparse 矩阵的点例程产生错误
【发布时间】:2013-08-10 21:06:34
【问题描述】:

我有一个CSR matrix

>> print type(tfidf)
<class 'scipy.sparse.csr.csr_matrix'>

我想取这个CSR matrix的两行点积:

>> v1 = tfidf.getrow(1)
>> v2 = tfidf.getrow(2)
>> print type(v1)
<class 'scipy.sparse.csr.csr_matrix'>

v1v2 也是 CSR 矩阵。所以我使用dot 子程序:

>> print v1.dot(v2)

Traceback (most recent call last):
  File "cosine.py", line 10, in <module>
    print v1.dot(v2)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 211, in dot
    return self * other
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 246, in __mul__
    raise ValueError('dimension mismatch')
ValueError: dimension mismatch

它们是同一个矩阵的行,所以它们的尺寸应该匹配:

>> print v1.shape
(1, 4507)
>> print v2.shape
(1, 4507)

为什么dot 子程序不起作用?

谢谢。

【问题讨论】:

  • 你的两个矩阵的维度是多少?他们不匹配吗?
  • @Justin:尺寸应该是一样的。它们是同一个矩阵的行。
  • 你不能做1xn 点缀1xn,它必须是1xn 点缀nx1v1.dot(v2.transpose()) 怎么样。
  • @贾斯汀:有效!谢谢!将此作为答案发布,我会接受。

标签: python scipy scikit-learn


【解决方案1】:

要执行两个行向量的点积,您必须转置一个。转置的结果取决于您要寻找的结果。

import scipy as sp

a = sp.matrix([1, 2, 3])
b = sp.matrix([4, 5, 6])

In [13]: a.dot(b.transpose())
Out[13]: matrix([[32]])

对比

In [14]: a.transpose().dot(b)
Out[14]: 
matrix([[ 4,  5,  6],
        [ 8, 10, 12],
        [12, 15, 18]])

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 2023-04-09
    • 2012-05-28
    • 2011-09-19
    • 1970-01-01
    • 2013-01-08
    • 2011-05-18
    • 2019-11-14
    • 2012-06-25
    相关资源
    最近更新 更多