小编KMi*_*ist的帖子

Numpy的'linalg.solve'和'linalg.lstsq'没有给出与Matlab的'\'或mldivide相同的答案

我正在尝试在Python上实现最小二乘曲线拟合算法,已经在Matlab上编写了它.但是,我无法获得正确的变换矩阵,问题似乎在解决步骤中发生.(编辑:我的变换矩阵使用Matlab非常准确,但完全不适用于Python.)

我在网上查看了很多资料,他们都表示要翻译Matlab的'mldivide',如果矩阵是正方形和非奇异的,你必须使用'np.linalg.solve',否则你必须使用'np.linalg.lstsq'.但我的结果并不匹配.

问题是什么?如果它与函数的实现有关,那么mumpivide在numpy中的正确翻译是什么?

我已附上以下两个版本的代码.除了解决部分之外,它们本质上是完全相同的实现.

Matlab代码:

%% Least Squares Fit

clear, clc, close all

% Calibration Data
scr_calib_pts = [0,0; 900,900; -900,900; 900,-900; -900,-900];
cam_calib_pts = [-1,-1; 44,44; -46,44; 44,-46; -46,-46];
cam_x = cam_calib_pts(:,1);
cam_y = cam_calib_pts(:,2);

% Least Squares Fitting
A_matrix = [];
for i = 1:length(cam_x)
    A_matrix = [A_matrix;1, cam_x(i), cam_y(i), ...
        cam_x(i)*cam_y(i), cam_x(i)^2, cam_y(i)^2];
end
A_star = A_matrix'*A_matrix
B_star = A_matrix'*scr_calib_pts
transform_matrix = mldivide(A_star,B_star)

% Testing Data
test_scr_vec = [200,400; 1600,400; -1520,1740; 1300,-1800; -20,-1600];
test_cam_vec = [10,20; 80,20; …
Run Code Online (Sandbox Code Playgroud)

python matlab numpy

11
推荐指数
2
解决办法
1万
查看次数

标签 统计

matlab ×1

numpy ×1

python ×1