1 回答

TA貢獻1785條經驗 獲得超4個贊
torch.lstq(a, b)求解minX L2∥bX?a∥ 同時 np.linalg.lstsq(a, b)求解minX L2∥aX?b∥
所以改變傳遞參數的順序。
這是一個示例:
將 numpy 導入為 np 導入火炬
a = torch.tensor([[1., 1, 1],
? ? ? ? ? ? ? ? ? [2, 3, 4],
? ? ? ? ? ? ? ? ? [3, 5, 2],
? ? ? ? ? ? ? ? ? [4, 2, 5],
? ? ? ? ? ? ? ? ? [5, 4, 3]])
b = torch.tensor([[-10., -3],
? ? ? ? ? ? ? ? ? [ 12, 14],
? ? ? ? ? ? ? ? ? [ 14, 12],
? ? ? ? ? ? ? ? ? [ 16, 16],
? ? ? ? ? ? ? ? ? [ 18, 16]])
a1 = a.clone().numpy()
b1 = b.clone().numpy()
x, _ = torch.lstsq(a, b)
x1, res, r1, s = np.linalg.lstsq(b1, a1)
print(f'torch_x: {x[:b.shape[1]]}')
print(f'np_x: {x1}')
結果:
torch_x: tensor([[-0.1145, -0.1047, -0.2863],
? ? ? ? [ 0.3591,? 0.3372,? 0.5407]])
np_x: [[-0.11452514 -0.10474861 -0.28631285]
?[ 0.35913807? 0.33719075? 0.54070234]]
而且rank
從 numpy.lianalg.lstsq 返回的是第一個參數的等級。要在 pytorch 使用函數中獲得排名torch.matrix_rank()
。
添加回答
舉報