abh*_*rni 5 python scipy scikit-learn
我有一个CSR矩阵:
>> print type(tfidf)
<class 'scipy.sparse.csr.csr_matrix'>
Run Code Online (Sandbox Code Playgroud)
我想取这个CSR矩阵的两行的点积:
>> v1 = tfidf.getrow(1)
>> v2 = tfidf.getrow(2)
>> print type(v1)
<class 'scipy.sparse.csr.csr_matrix'>
Run Code Online (Sandbox Code Playgroud)
无论v1和v2也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
Run Code Online (Sandbox Code Playgroud)
它们是相同矩阵的行,因此它们的尺寸应该匹配:
>> print v1.shape
(1, 4507)
>> print v2.shape
(1, 4507)
Run Code Online (Sandbox Code Playgroud)
为什么dot子程序不起作用?
谢谢.
要执行两个行向量的点积,您必须转置一个.转置的那个取决于你正在寻找的结果.
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]])
Run Code Online (Sandbox Code Playgroud)
与
In [14]: a.transpose().dot(b)
Out[14]:
matrix([[ 4, 5, 6],
[ 8, 10, 12],
[12, 15, 18]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1905 次 |
| 最近记录: |