Matlab | 找出数组/向量中的重复项的索引

一、问题描述

输入一个数组,里面含有重复项,想要将其重复的项的序号指示出来。

二、问题分析

unique()函数可以去除数组的重复项,并且返回索引。我们可以利用这个返回的索引,进而找出原数组中重复出现的位置。

三、代码

贴了两份代码,第一份输出形式数组,第二份输出形式是元胞。

clear;clc;close;

% 输入:一个有小到大排列的,有序的,含有重复项的数组;
% 输出:数组的重复项的序号,每组重复项之间用0分隔开;

clear;clc;close;

% 输入:一个有小到大排列的,有序的,含有重复项的数组;
% 输出:数组的重复项的序号,每组重复项之间用0分隔开;

% TimeDelaySort = [1,1,1,2,4,4,9]; % 12356;项重复
TimeDelaySort = [1.01,1.01,1.011,2.5,2.8,2.8,4.33,4.33,9]; % 125678;项重复

[TimeDelaySortUni,IndexTimeA] = unique(TimeDelaySort,'stable'); % IndexTimeA返回索引
N_baseUni = length(TimeDelaySortUni);

RepeatItem = 0; % 第一个数0,是无效的,为了索引
for ii = 2:N_baseUni % 找到重复项
    if IndexTimeA(ii) - IndexTimeA(ii-1) > 1
        NowRepeatItem = [0,IndexTimeA(ii-1):(IndexTimeA(ii)-1)];
        RepeatItem = [RepeatItem,NowRepeatItem];
    end
end

disp('向量重复项出现于')
disp(RepeatItem(2:end));

clear;clc;close;

% 输入:一个有小到大排列的,有序的,含有重复项的数组;
% 输出:一个元胞,里面是重复的项;

TimeDelaySort = [1,1,1,2,4,4,9]; % 12356;项重复
% TimeDelaySort = [1.01,1.01,1.011,2.5,2.8,2.8,4.33,4.33,9]; % 125678;项重复

[TimeDelaySortUni,IndexTimeA] = unique(TimeDelaySort,'stable'); % IndexTimeA返回索引
N_baseUni = length(TimeDelaySortUni);

aa = 0;
for ii = 2:N_baseUni % 找到重复项
    if IndexTimeA(ii) - IndexTimeA(ii-1) > 1
        aa = aa + 1;
        RepeatItem{aa} = [IndexTimeA(ii-1):(IndexTimeA(ii)-1)];
    end
end

disp('向量重复项出现于')
for ii = 1:aa
    disp(RepeatItem{ii});
end

四、运行结果

Matlab | 找出数组/向量中的重复项的索引_第1张图片
Matlab | 找出数组/向量中的重复项的索引_第2张图片

你可能感兴趣的:(matlab,matlab,开发语言,算法)