我有一个有很多连续值的向量,我想把这些值写进一个矩阵(稍后做一些逐行的事情),但我不太明白怎么做。例如:
x = [1,2,4,5,7,8,9,11,12,13,14,15]
需要成为
y = [1,2;4,5;7,8,9;11,12,13,14,15]
我看过一些类似的帖子,只是检查值是否连续,但我不知道如何从这些帖子中写出我想要的矩阵。编辑:这实际上是不可能的,因为矩阵需要相同的维度,(就像我不能随机地让一些行比其他行长),但我仍然不知道如何将向量划分为连续数字的较小部分。
r7xajy2e1#
您可以使用accumarray将anonymous function应用于输入组,生成cell array,条件是每组内的连续增量为1。请注意,这样做是对because组标签进行排序的。另请参阅diff和cumsum以了解代码的作用。
accumarray
1
diff
cumsum
x = [1,2,4,5,7,8,9,11,12,13,14,15]; ind = cumsum([true; diff(x(:))~=1]); % generate group labels y = accumarray(ind, x(:), [], @(x){x.'}) % collect values based on group labels
在示例中,代码给出
>> celldisp(y) y{1} = 1 2 y{2} = 4 5 y{3} = 7 8 9 y{4} = 11 12 13 14 15
1条答案
按热度按时间r7xajy2e1#
您可以使用
accumarray
将anonymous function应用于输入组,生成cell array,条件是每组内的连续增量为1
。请注意,这样做是对because组标签进行排序的。另请参阅diff
和cumsum
以了解代码的作用。在示例中,代码给出