我正在寻找一个高效的 MATLAB 函数,它能够将向量转换为具有一组唯一数字的单元格
例如
来自
a=[1 1 5 5 5 2 1 1 1 2 2 6 6 6 8 8 8 8]
到
a={[1 1] [5 5 5] [2] [1 1 1] [2 2] [6 6 6] [8 8 8 8]}
我以前的方法是在循环内运行之前定位变化点:
例如
change_pts = a-[0,a(1:length(a)-1)];
for i=find(ans~=0)
% codes here
end
但这显然不是一个优化的解决方案。
谢谢
最佳答案
您可以使用函数 diff
创建矢量化解决方案和 mat2cell
像这样:
a = mat2cell(a, 1, diff([0 find([(diff(a) ~= 0) 1])]));
它的工作原理是首先定位值变化的位置并用 1 标记相等数字序列的末端。然后它找到所有的索引并计算这些索引之间的跨度(即每个相等序列的计数数)。这些计数随后被 mat2cell
使用将向量分解为元胞数组。
关于MATLAB:一个高效的函数,可以对 Vector 中的唯一数字进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20737068/