我有一个包含整数和非整数的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];
我想要的是创建两组新的矩阵A1
和A2
,以便扫描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];
答案 0 :(得分:4)
如果您的"非整数"数字只有x.5,您只需使用floor
和ceil
:
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;