你可以试试这个:
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