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

四、运行结果

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值