【问题标题】:How can I create two other matrices from a single mx3 matrix?如何从单个 mx3 矩阵创建另外两个矩阵?
【发布时间】:2017-05-25 00:09:07
【问题描述】:

我有一个包含整数和非整数的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];

我想要的是创建 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];

【问题讨论】:

    标签: arrays matlab vector


    【解决方案1】:

    如果您的“非整数”数字只有 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;
    

    【讨论】:

    • 另外,对于一般情况,A1 = A-((mod(A,1)>0)*.5);A2 类似
    • 谢谢@Luis mendo。我现在已经很好地解决了这个问题。
    【解决方案2】:

    你也可以设定一个条件,根据你如何满足这个条件,加或减 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;
    

    【讨论】:

    • 感谢@Murad Omar。
    猜你喜欢
    • 2021-11-16
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多