如何利用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语言。好的,让我看看:)非常感谢,如果问题不清楚,请随时问我。顺便说一下,我一直在尝试使用逻辑索引。