从 matlab 到 python 时出现尺寸错误
dimension error while from matlab to python
我想把gramschmidt_process,matlab的算法改成python
但是我得到了一个错误
def qr_mgs(A):
m, n = A.shape
Q = A
R = np.zeros((n, n))
for i in range(n - 1):
R[i, i] = np.linalg.norm(Q[:, i])
Q[:, i] = Q[:, i] / R[i, i]
R[i, i+1:n] = np.matmul(np.transpose(Q[:, i]), Q[:, i+1:n])
Q[:, i+1:n] = Q[:, i+1:n] - np.matmul(Q[:, i], R[i, i+1:n])
R[n, n] = np.linalg.norm(Q[:, n])
Q[:, n] = Q[:, n]/R[n, n]
return Q, R
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 3)
有什么问题???
是尺寸问题吗?
尝试用一些简单的例子来调试代码。
qr_mgs(np.arange(1, 10).reshape(3,3))
当我调试你的代码时,这一行的维度不匹配:
Q[:, i+1:n] = Q[:, i+1:n] - np.matmul(Q[:, i], R[i, i+1:n])
Q[:, i]
长度为 3,R[:, i+1:n]
长度为 2。
您可能遇到一些索引问题,我不是代数专家,所以无法帮助您修复算法。
我想把gramschmidt_process,matlab的算法改成python 但是我得到了一个错误
def qr_mgs(A):
m, n = A.shape
Q = A
R = np.zeros((n, n))
for i in range(n - 1):
R[i, i] = np.linalg.norm(Q[:, i])
Q[:, i] = Q[:, i] / R[i, i]
R[i, i+1:n] = np.matmul(np.transpose(Q[:, i]), Q[:, i+1:n])
Q[:, i+1:n] = Q[:, i+1:n] - np.matmul(Q[:, i], R[i, i+1:n])
R[n, n] = np.linalg.norm(Q[:, n])
Q[:, n] = Q[:, n]/R[n, n]
return Q, R
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 3)
有什么问题???
是尺寸问题吗?
尝试用一些简单的例子来调试代码。
qr_mgs(np.arange(1, 10).reshape(3,3))
当我调试你的代码时,这一行的维度不匹配:
Q[:, i+1:n] = Q[:, i+1:n] - np.matmul(Q[:, i], R[i, i+1:n])
Q[:, i]
长度为 3,R[:, i+1:n]
长度为 2。
您可能遇到一些索引问题,我不是代数专家,所以无法帮助您修复算法。