我在Matlab中有一个数组
A = [1 2 3 4 5 6 7 8 9;
67 67 67 86 86 86 86 67 67]';
其中A的第一行中的每个点对应于“{1}}或67
的”代码“。我试图提取86
和"67s"
的这些块,这样每次一个块开始时,相应的元素被放入一个名为X的不同数组的第三维中,其中。
因此,例如在A我有3个不同的块,所以我想最终得到一个大小为1x9x3的数组X.对于例如第一个"86s"
块我想要X
67
我知道我会使用for循环“填充”此向量X
X(1,:,1) = [1 2 3];
但这当然不正确或完整,因为首先我不确定如何分离“块”以及如何正确地“填写”X(1,i,j)中的j。其次,如何让代码识别出有多少块?
有人可以帮忙吗?
由于
答案 0 :(得分:0)
一种可能的方法,基于this回答:
>> B = accumarray([0; cumsum(diff(A(:,2)) ~= 0)] + 1, A(:,1), [], @(x) {x}, [])
现在你有了这个:
>> B{1}
ans =
1
2
3
>> B{2}
ans =
4
5
6
7
>> B{3}
ans =
8
9