gpt4 book ai didi

MATLAB:根据多个值拆分矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:47 24 4
gpt4 key购买 nike

我正在处理这种格式的矩阵:

M =
1 1 3
1 1 1
1 2 2
1 2 1
1 2 2
2 1 5
2 1 1
2 2 3
2 2 4
2 2 2
...

我想做的是提取子矩阵,其中第一列和第二列中的值可以这样分组:

M1 =
1 1 3
1 1 1

M2 =
1 2 2
1 2 1
1 2 2

M3 =
2 1 5
2 1 1

...

我一直在努力思考如何为此矩阵编制索引,并且我有一个可用的矩阵:

I =
1 1
1 2
2 1
2 2
...

我可以用于索引。我想知道我是否可以使用它,但我不是 100% 确定如何使用。我不想使用 for 循环,因为矩阵可能相当大,而且复杂度的阶数可能会变得非常大。

感谢阅读!

最佳答案

这很容易用 unique 完成和 accumarray :

M = [ 1    1    3
1 1 1
1 2 2
1 2 1
1 2 2
2 1 5
2 1 1
2 2 3
2 2 4
2 2 2 ]; %// data
[~, ~, u] = unique(M(:,1:2), 'rows'); %// unique labels of rows based on columns 1 and 2
M_split = accumarray(u(:), (1:size(M,1)).', [], @(x){M(sort(x),:)}); %'// group rows
% // based on labels

这给出了一个 cell array包含部分矩阵。在你的例子中,

M_split{1} =
1 1 3
1 1 1
M_split{2} =
1 2 2
1 2 1
1 2 2
M_split{3} =
2 1 5
2 1 1
M_split{4} =
2 2 3
2 2 4
2 2 2

关于MATLAB:根据多个值拆分矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35183894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com