我在numpy中运行qr分解,它返回一个ndarrays列表,即Qand R: [q,r] = np.linalg.qr(np.array([1,0,0,0,1,1,1,1,1]).reshape(3,3)) R是一个二维数组,底部有零线(甚至在我的测试集中的所有例子都证明了这一点):
>>> [q,r] = np.linalg.qr(np.array([1,0,0,0,1,1,1,1,1]).reshape(3,3))
R是一个二维数组,底部有零线(甚至在我的测试集中的所有例子都证明了这一点):
>>> print r [[ 1.41421356 0.70710678 0.70710678] [ 0. 1.22474487 1.22474487] [ 0. 0. 0. ]]
.现在,我想将R分成两个矩阵R_~:
[[ 1.41421356 0.70710678 0.70710678] [ 0. 1.22474487 1.22474487]]
和R_0:
[[ 0. 0. 0. ]]
(提取所有零线).它似乎接近这个解决方案:deleting rows in numpy array.
编辑:
更有趣的是:np.linalg.qr()返回一个n x n矩阵.不,我本来期望的:
A := n x m Q := n x m R := n x m将np.all与axis参数一起使用:
>>> r[np.all(r == 0, axis=1)] array([[ 0., 0., 0.]]) >>> r[~np.all(r == 0, axis=1)] array([[-1.41421356, -0.70710678, -0.70710678], [ 0. , -1.22474487, -1.22474487]])