我正在计算 scipy.sparse 矩阵(CSC)和 numpy ndarray 向量之间的点积:
>>> print type(np_vector), np_vector.shape
<type 'numpy.ndarray'> (200,)
>>> print type(sp_matrix), sparse.isspmatrix(sp_matrix), sp_matrix.shape
<class 'scipy.sparse.csc.csc_matrix'> True (200, 200)
>>> dot_vector = dot(np_vector, sp_matrix)
结果似乎是一个新的 ndarray 向量,正如我所期待的:
>>> print type(dot_vector), dot_vector.shape
<type 'numpy.ndarray'> (200,)
但是,当我尝试向该向量添加标量时,我收到异常:
>>> scalar = 3.0
>>> print dot_vector + scalar
C:\Python27\lib\site-packages\scipy\sparse\compressed.pyc in __add__(self, other)
173 return self.copy()
174 else: # Now we would add this scalar to every element.
--> 175 raise NotImplementedError('adding a nonzero scalar to a '
176 'sparse matrix is not supported')
177 elif isspmatrix(other):
NotImplementedError: adding a nonzero scalar to a sparse matrix is not supported
好像结果dot_vector
又是一个稀疏矩阵。
具体来说,好像我有一个 ndarray 但__add__
为运算符调用了稀疏矩阵+
。
这是我希望被调用的方法:
>>> print dot_vector.__add__
<method-wrapper '__add__' of numpy.ndarray object at 0x05250690>
我在这里遗漏了什么或者这真的看起来很奇怪吗?
是什么决定了操作员调用哪种方法+
?
我在 IPython Notebook ( ipython notebook --pylab inline
) 中运行此代码。会不会是 IPython --pylab 或笔记本内核搞砸了?
谢谢你的帮助!