在Matlab中交换3 * 3 * 1矩阵的两个元素

时间:2018-02-13 06:21:37

标签: matlab matrix

我有一个三维(3 * 3 * 1)矩阵,当我尝试将0与其旁边的元素交换时(例如右边的元素),它交换了两个元素但不知何故所有其他元素元素变为0(由结果1 表示)。

clear all
clc

count=1;
node=[4,0,3;7,5,6;8,1,2];

[m,n,~]=find(~node);

node(m,n,count+1)=node(m,n+1,count);
node(m,n+1,count+1)=0;
count=count+1;
disp(node(:,:,count))

结果1:

 0     3     0
 0     0     0
 0     0     0

然而,当我使用二维(3 * 3)矩阵尝试同样的事情时,结果就是我的预期(由结果2 显示)。

clear all
clc

count=1;
node=[4,0,3;7,5,6;8,1,2];

[m,n,~]=find(~node);

node(m,n)=node(m,n+1,count);
node(m,n+1)=0;
count=count+1;
disp(node)

结果2:

 4     3     0
 7     5     6
 8     1     2

为什么会这样,我该如何解决?感谢。

1 个答案:

答案 0 :(得分:2)

3*3*1不是3D矩阵。它是2D。 3*3*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*也是2D。任何矩阵都有无限单个更高维度。

使用此行node(m,n,count+1)=node(m,n+1,count);,您可以将其更改为3D node(m,n+1,count);等于3
 m=1 (1st row), n=2+1=3 (3rd column), and count=1 (1st 3D slice)

并将其保存在node(m,n,count+1)
m=1 (1st row), n=2 (2nd column), count+1=2 (2nd 3D slice)

但您只显示带有count=count+1; disp(node(:,:,count))的第二个3D切片 请注意,count现在等于2

初始化为零的其余元素是默认行为。例如a(10) = 9会使a的前9个元素为零(如果a之前的工作空间不存在)。

您的代码还有一个问题,即如果第三列中存在零,那么您的代码会尝试将其替换为第四列中不存在的相应值因此你会得到:

  

指数超出矩阵维度。

因此,您需要丢弃第3列的值或为这种情况定义所需的行为。