乘法适用于密集矩阵,但不适用于压缩行矩阵

时间:2014-08-01 21:29:41

标签: python numpy matrix scipy

以下是我的变数:

In [232]:Y=np.ones((1024,1))
In [233]:X=np.ones((1024,1))
In [234]:YY=Y*2

这有效:

In [235]:(YY-X)*X 

然而,这不是:

In [236]:(scipy.sparse.csr_matrix(YY)-scipy.sparse.csr_matrix(X))*scipy.sparse.csr_matrix(X)

导致:

ValueError: dimension mismatch

现在,如果我想这样做:

In [245]: XX=scipy.sparse.csr_matrix(X)
In [246]: YYY=scipy.sparse.csr_matrix(YY)
In [247]: (YYY-XX)*XX
ValueError: dimension mismatch
In [255]: (YYY.todense()-XX.todense())*XX.todense()
ValueError: matrices are not aligned

任何人都能解释为什么会这样吗?据我所知,这应该有效。我可能忽视了一些事情。

1 个答案:

答案 0 :(得分:2)

这是因为这些示例不是等效的代码片段。如果你有

,那将是相同的
> Y = np.matrix(np.ones((1024, 1))
> X = np.matrix(np.ones((1024, 1))
> YY = Y * 2
> (YY - X) * X

这会给你ValueError: matrices are not aligned。 NumPy具有array类和matrix类,array乘法与matrix乘法不同。使用np.ones,您构建arrayarray乘法是逐点的,而matrix乘法是Matrix Multiplication