MATLAB:一个高效的函数,可以对 Vector 中的唯一数字进行分组

标签 matlab vector unique cell

我正在寻找一个高效的 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/

相关文章:

arrays - 数组各部分的 Octave 平均值

matlab - MATLAB 中元胞数组的左连接

计算旋转矩阵以将 vector (1,1,1) 与 vector 对齐

javascript - 获取对象数组中第一个重复项javascript

在 C 中创建唯一的订单 ID

matlab - 有没有办法在 MATLAB 中查看有多少位组成任意变量 X?

c++ - 处理删除命令期间出现段错误

C++ 元素访问无法正常工作?

android - 在 Firebase 中获取唯一推送 ID

arrays - 显示不带引号的元胞数组 - MATLAB