在这种情况下如何使用循环?

时间:2015-05-16 12:47:55

标签: matlab matrix matlab-guide matlab-deployment

我有3个矩阵,

test_1=[1 2 3; 4 5 6; 7 8 9; 10 11 12; 13 14 15; 16 17 18];
test_2=[16 18 15; 6 5 8; 2 9 5; 11 19 21; 22 28 30; 14 16 19];
test_3=[11 9 7; 8 22 17; 27 31 30; 28 26 40; 66 57 36; 82 21 19];

我想将前两行的所有元素保存为

firstrow_test_1= test_1([1; 2],:);
firstrow_test_2= test_2([1; 2],:);
firstrow_test_3= test_3([1; 2],:);

这些矩阵将给出前两行test_1,test_2,test_3的所有元素的结果。 然后我想获取test_1,test_2和test_3的第3和第4行,并将元素保存在另一组metrices中。

secondrow_test_1= test_1([3; 4],:);
secondrow_test_2= test_2([3; 4],:);
secondrow_test_3= test_3([3; 4],:);

与其他人类似,我必须这样做,

thirdrow_test_1= test_1([5; 6],:);
thirdrow_test_2= test_2([5; 6],:);
thirdrow_test_3= test_3([5; 6],:);

如果我这样做,那么代码会很长。那么有什么方法可以用更短的方式编写代码吗?如果有可能的话,有人可以帮我在这种情况下使用循环吗?

  1. 如果我们有50个矩阵,如test_1,test_2,...,test_50,我们想在这种情况下做同样的事情怎么办? (将前两行保存在另一个矩阵中,然后在另一个矩阵中保存下两行..等等)
  2. 感谢。

1 个答案:

答案 0 :(得分:1)

这是MatLab(矩阵实验室)。您需要使用矩阵的多个维度来存储数据,而不是创建单独的变量,如果它们都具有相同的维度(如您的情况)。否则,如果它们的尺寸不相同,则可以使用单元阵列。

以下是一些可能对您有帮助的链接。

举个例子(看看使用nD矩阵可以轻松解决问题)

%// creating multidimensional matrix from those 2D matrix
A = cat(3,test_1, test_2, test_3);   %// stacking each 2D slices in 3rd dimension
例如,

可以使用firstrow_test_1访问A(1:2,:,1)

类似地,
可以使用firstrow_test_2

访问A(1:2,:,2)

依旧等等。我希望你有个主意。

在这里,我将2D切片创建为3D矩阵,就像将它们作为2D切片一样。但您应该能够直接创建3D矩阵,并且可以应用相同的过程。