这是我的变量:
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
谁能解释一下为什么会出现这种情况?据我所知,这应该有效。我可能忽略了一些事情。
最佳答案
出现这种情况是因为这些示例不是等效的代码段。如果你有的话,等价的是
> Y = np.matrix(np.ones((1024, 1))
> X = np.matrix(np.ones((1024, 1))
> YY = Y * 2
> (YY - X) * X
这会给你ValueError:矩阵未对齐
。 NumPy 具有 array
类和 matrix
类,并且 array
乘法与 matrix
乘法不同。使用 np.ones,您可以构造一个数组,数组乘法是逐点的,而矩阵乘法是 Matrix Multiplication 。
关于python - 乘法适用于密集矩阵,但不适用于压缩行矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088953/