如何利用MATLAB中的条件从矩阵a生成矩阵B

如何利用MATLAB中的条件从矩阵a生成矩阵B,matlab,loops,matrix,Matlab,Loops,Matrix,如果我有这个矩阵: A: X Y Z 1 1 2 0 3 4 0 5 6 2 7 8 7 9 10 8 11 12 3 13 14 12 14 16 15 17 18 如何创建包含以下内容的新矩阵B、C、D和E: B: 0 3 4 0

如果我有这个矩阵:

A:

X       Y       Z
1       1       2
0       3       4
0       5       6
2       7       8
7       9       10
8       11      12
3       13      14
12      14      16
15      17      18
如何创建包含以下内容的新矩阵B、C、D和E:

B:
0       3       4
0       5       6

C: 
X       Y       Z
1       1       2 
2       7       8
3       13      14

D: 
7       9       10
8       11      12

E: 
12      14      16
15      17      18

其思想是构造一个循环,询问是否
0,而不是使用循环,而是使用来实现您想要的。使用
A
的第一列,检查要查找的范围,然后使用该列将其子集到最终矩阵
A
中,以获得所需的内容

例如,要创建矩阵
C
,请在
A
的第一列中找到介于1和5之间的所有位置,然后使用这些位置沿行对矩阵进行子集划分:

m = A(:,1) >= 1 & A(:,1) <= 5;
C = A(m,:);

m=A(:,1)>=1&A(:,1)我建议您使用一种方法,以便根据矩阵行的范围将其分为不同的类别。以下是完整的实施:

A = [
    1       1       2;
    0       3       4;
    0       5       6;
    2       7       8;
    7       9       10;
    8       11      12;
    3       13      14;
    12      14      16;
    15      17      18
];

A_range = [0 1 5 10 15];

bin_idx = discretize(A(:,1),A_range);
A_split = arrayfun(@(bin) A(bin_idx == bin,:),1:(numel(A_range) - 1),'UniformOutput',false);
celldisp(A_split);

由于要根据第一列值考虑<代码> 5 /代码>不同的范围,传递给<代码>的参数离散化必须是第一个矩阵列和包含组限制的向量。(第一个数字包括左,第二个数字包括右,第二个数字包括左,第三个数字包括右,依此类推)。由于您的范围有点混乱,请随意调整它们以尊重正确的输出。后者以双矩阵单元格数组的形式返回,其中每个元素包含属于不同组的行:

A_split{1} =

     0     3     4
     0     5     6

A_split{2} =

     1     1     2
     2     7     8
     3    13    14

A_split{3} =

     7     9    10
     8    11    12

A_split{4} =

    12    14    16
    15    17    18

听起来是个合理的想法。你试过写一个这样的脚本吗?rayryeng,你对如何开始解决这个问题有什么建议吗?我不知道R,所以我无法提供帮助。但是,有没有使用matlab或任何软件的想法?我正在寻找建议来打开我的思路并开始解决它。我已经尝试过好几次了。所以,如果我用c使用其他语言解决它Tommaso,你对如何开始解决这个问题有什么建议吗?是R,不是Matlab。我已经很久没有使用它了。谢谢Tommaso,但我可以使用Matlab中的矩阵来尝试。我正在寻找一个想法来打开我的思路,再次尝试解决它。我也知道Matlab语言。好的,让我看看:)非常感谢,如果问题不清楚,请随时问我。顺便说一下,我一直在尝试使用逻辑索引。