这个任务在纽比是很小的
import numpy as np
a= np.array([[1,2,3,0,9],[3,2,6,2,7],[0,0,0,8,0],[1,0,0,0,3]])
a + a[1]
输出:
^{pr2}$看看向量维数是如何自动广播到矩阵的每一行的。在
但是对于稀疏矩阵,存在维数不匹配误差。在
from scipy.sparse import *
a= csr_matrix([[1,2,3,0,9],[3,2,6,2,7],[0,0,0,8,0],[1,0,0,0,3]])
a + a[1]
输出:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-32-74c48fe5106e> in <module>()
2
3 a= csr_matrix([[1,2,3,0,9],[3,2,6,2,7],[0,0,0,8,0],[1,0,0,0,3]])
----> 4 a + a[1]
/opt/anaconda2/lib/python2.7/site-packages/scipy/sparse/compressed.pyc in __add__(self, other)
337 elif isspmatrix(other):
338 if (other.shape != self.shape):
--> 339 raise ValueError("inconsistent shapes")
340
341 return self._binopt(other,'_plus_')
ValueError: inconsistent shapes
有一个用于稀疏乘法的函数,例如,a.multiply(a[1])
表示a * a[1]
(它做得很好),但是我找不到一个用于加法的函数。在
我不熟悉稀疏矩阵。请帮忙。在
尝试使用:
它将是:
^{pr2}$更新:
使加法矩阵
b
具有相同的维数并用a[1]
填满,然后将它们相加:尚未为稀疏矩阵实现
numpy
样式的广播。在乘法,特别是矩阵乘法,发展很快。事实上,像行求和和和行的选择这样的操作是作为矩阵乘法来实现的,例如
M * <column vector of 1s>
。乘法通常会得到一个矩阵,如果不是更稀疏的话。在加减法发展得不好。它通常导致一个更密集的矩阵。极端情况是向所有元素添加标量。即使在您的示例中,结果也是密集的。}都必须非常稀疏才能证明纯稀疏加法的合理性。在
a
和{我们可以通过矩阵乘法复制选定的行-首先是广播密集方法:
^{pr2}$稀疏矩阵乘法:
稀疏矩阵加法:
如果}稀疏,这将是一个更好的演示。我也可以将
aM
尤其是{np.ones
指定为int
数据类型来匹配aM
。使其成为csc
矩阵会更紧凑。在相关问题 更多 >
编程相关推荐