Matlab矩阵——矩阵行列互换

问题:如何将 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 结果一致

完整矩阵行列互换如下:

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 结果一致

仅供参考。

版权声明:本文为博主作者:进阶小白001原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/Huashangniepan/article/details/131742876

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2024年1月11日
下一篇 2024年1月11日

相关推荐