问题:如何将 1*n 的矩阵转换为指定 M*N 的矩阵,或者将 M*N 的矩阵转换为 1*n 的矩阵?
处理方法:使用 reshape 函数进行矩阵的行列互换
分两种情况如下:
一、将 1*n 的矩阵转换为指定 M*N 的矩阵
假如有4个坐标值:
% 4 个坐标数据
x1 = [100,202,566];
x2 = [125,160,488];
x3 = [251,264,945];
x4 = [457,485,584];
Pos = [x1,x2,x3,x4];
将其转为 4*3 的矩阵,
M = 4; % 代表行数
N = 3; % 代表列数
Poss = reshape(Pos,[M N]);
%{ 其结果为:
Poss = [100 160 945
202 488 457
566 251 485
125 264 584]
%}
很明显结果并不是我们想要的,这是由于 reshape 函数是按列进行排序的,所以我们在转换的时候要将行数设为 3,列数为坐标点的个数 (即 4),然后将转换后的取转置即可得到我们想要的格式,具体如下所示:
M = 3; % 代表行数,即三维坐标
N = 4; % 代表列数,即几个坐标点
POs = reshape(Pos,[M N])'; % 转换后的坐标
%{ 其结果为:
POs = [100 202 566;
125 160 488;
251 264 945;
457 485 584];
%}
可以看到,结果是对的。
二、将 M*N 的矩阵转换为 1*n 的矩阵
同样使用 reshape 函数,不同的是维度的选取,如下所示:
POs = [100,202,566;
125,160,488;
251,264,945;
457,485,584];
M = 1; % 行数
N = 12; % 列数,也可写成 [],系统会自动计算列数
POS = reshape(POs,M,[]);
% 结果为:POS = [100 125 251 457 202 160 264 485 566 488 945 584];
% 很明显结果不对,我们需要将 POs 取转置后再进行转换,即
POS = reshape(POs',M,[]); % 此时,结果正确
% 结果为:POS = [100 202 566 125 160 488 251 264 945 457 485 584]
% 和初始 Pos 结果一致
完整矩阵行列互换如下:文章来源:https://www.toymoban.com/news/detail-713255.html
close all; clear all; clc;
% 4 个坐标数据
x1 = [100,202,566];
x2 = [125,160,488];
x3 = [251,264,945];
x4 = [457,485,584];
Pos = [x1,x2,x3,x4]; % 即:Pos = [100,202,566,125,160,488,251,264,945,457,485,584];
% 设置行列数
M1 = 3; % 代表行数,即三维坐标
N1 = 4; % 代表列数,即几个坐标点
POs = reshape(Pos,[M1 N1])';
%{ 其结果为:
POs = [100 202 566;
125 160 488;
251 264 945;
457 485 584];
%}
M2 = 1; % 代表行数
N2 = []; % 代表列数,也可用列数值代替
POS = reshape(POs',M2,N2);
% 结果为:POS = [100 202 566 125 160 488 251 264 945 457 485 584]
% 和初始 Pos 结果一致
仅供参考。文章来源地址https://www.toymoban.com/news/detail-713255.html
到了这里,关于Matlab矩阵——矩阵行列互换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!