Scipy.sparse矩阵的点积例程出错

5

我有一个CSR矩阵

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

我想要对这个CSR矩阵的两行进行点积:

>> 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
@Justin:维度应该是相同的。它们是同一矩阵的行。 - abhinavkulkarni
你不能将1xn1xn点乘,必须是1xnnx1点乘。那么v1.dot(v2.transpose())怎么样? - Justin
@Justin:可以了!谢谢!把这个作为答案发布,我会接受它。 - abhinavkulkarni
1个回答

7

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

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]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接