如何从单个mx3矩阵创建另外两个矩阵?

时间:2017-05-24 11:30:37

标签: arrays matlab vector

我有一个包含整数和非整数的mx3矩阵A

A = [1.5 1   1
     1   1.5 1
     2   1.5 1
     1.5 2   1
     1   1   1.5
     2   1   1.5
     1   2   1.5
     2   2   1.5
     1.5 1   2
     1   1.5 2
     2   1.5 2
     1.5 2   2];

我想要的是创建两组新的矩阵A1A2,以便扫描A的每一行和

A1 =从任何列中找到的任何非整数中减去0.5,并保持整数不变。

A2 =从任何列中找到的任何非整数中加0.5,并保持整数不变。

我希望我的最终数组是:

A1 = [1 1 1
      1 1 1
      2 1 1
      1 2 1
      1 1 1
      2 1 1
      1 2 1
      2 2 1
      1 1 2
      1 1 2
      2 1 2
      1 2 2];

A2 = [2 1 1
      1 2 1
      2 2 1
      2 2 1
      1 1 2
      2 1 2
      1 2 2
      2 2 2
      2 1 2
      1 2 2
      2 2 2
      2 2 2];

2 个答案:

答案 0 :(得分:4)

如果您的"非整数"数字只有x.5,您只需使用floorceil

A1 = floor(A);
A2 = ceil(A);

如果不是这种情况则使用逻辑索引:

A1 = A;
A1(round(A1) ~= A1) = A1(round(A1) ~= A1) - 0.5;
A2 = A;
A2(round(A2) ~= A2) = A2(round(A2) ~= A2) + 0.5;

答案 1 :(得分:1)

您也可以制定一个条件,并根据您满足该条件的方式添加或减去0.5:

cond = (rem(A3,1) ~= 0);%Generates a logical matrix
A1 = A; A2 = A;

%subtract and add 0.5 only to the elements which satisfy the condition:
A1(cond) = A1(cond) -0.5;
A2(cond) = A2(cond) +0.5;