你可以试试这个:
A= [0 0 2 2 2 2 0 0 1 1 1 0 3 3;
2 2 2 2 0 0 1 1 1 0 0 3 3 0];
result = arrayfun(@(b) (A == b).*cumsum((A == b),2),nonzeros(unique(A)), 'UniformOutput', false);
对于此示例,变量结果中将有3个子矩阵.
result =
[2x14 double]
[2x14 double]
[2x14 double]
要访问它们,请使用以下语法:
result{1}
result{2}
result{3}
然后你得到:
ans =
0 0 0 0 0 0 0 0 1 2 3 0 0 0
0 0 0 0 0 0 1 2 3 0 0 0 0 0
ans =
0 0 1 2 3 4 0 0 0 0 0 0 0 0
1 2 3 4 0 0 0 0 0 0 0 0 0 0
ans =
0 0 0 0 0 0 0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 0 0 0 0 1 2 0
〜编辑〜
如果,如评论中所述,A是3D矩阵,则此代码的工作原理相同,但结果的结构有点不同:
result =
[2x14x2 double]
[2x14x2 double]
[2x14x2 double]
要访问这些矩阵,请使用例如
result{1}(:,:,1) % for the results of comparing A(:,:,1) with value 1
result{1}(:,:,2) % for the results of comparing A(:,:,2) with value 1
本文提供了一个MATLAB示例,展示了如何使用arrayfun函数对矩阵进行特定操作,并累积求和,适用于二维或三维矩阵。文中详细解释了如何获取和访问处理后的子矩阵。
3万+

被折叠的 条评论
为什么被折叠?



