返回信息流a=[2,6,4,6,7,8,3,5,6]
并得到这三个6的位置b=[2,4,9]
有木有一句实现的函数
或是简明一点的方法挖。
谢谢各位大牛!~
这是一条镜像帖。来源:北邮人论坛 / matlab / #3083同步于 2008/4/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
【求助】怎样将一组数中相同的几个值选出来
labi
2008/4/1镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
没灵感了。。。
【 在 labi 的大作中提到: 】
: 没有说清楚哈,事先不知道是找6
: 是找a里面有没有重复的值
: 将这个重复的值所在位置找出来。
不太好做,因为事先也不知道有几个数是重复的,万一有两个数重了,一个是2,一个是6那还怎么得到位置呢?
【 在 labi 的大作中提到: 】
: a=[2,6,4,6,7,8,3,5,6]
: 并得到这三个6的位置b=[2,4,9]
: 有木有一句实现的函数
: ...................
%想了一个很恶心的办法,算法的性能很差. 主要想利用库函数unique()的特性
clear
clc
A = [1,3,2,1,1,4,7,11,25,1,11,3,2,4,11];
[b, m1, n] = unique(A, 'first');%%% n中重复出现的元素的位置完全等价于在A中重复 出现的位置.
% 但是n的取值范围限定在1:length(b),对后面的处理算是一个简化.
% ps:自己编算法的话,感觉实现这个结果强大的unique()的同时,就能实现找出具体的重复元素,位置的要求
% 了,所以这个方法很恶心.下面的全是无用功. 当然,直接利用b使用find(A == b(ii))也是可行的,
% 但在重复元素不多的情况下可能不理想。
[b, m2, n] = unique(A, 'last'); %%% b, n在'first','last'两种方式各自相同
delta = ((m2 - m1) ~= 0); %%% m1-m2 不为零的位置,说明该元素"首次"和"末次"位置不同,即至少两次
temp = find(delta ~= 0); %%% 找出所有出现过2次以上的元素在已经"除去重复元素且升序排序"的序列b中
% 的位置(可得到重复的元素)
index = cell(sum(delta, 2), 1); %%% 这些元素的个数是delta中1的总数
B = zeros(1, sum(delta, 2)); %%% 重复的元素
for ii = 1:sum(delta,2)
index{ii, 1} = find(n == temp(ii)); %%% index{ii,1}中是同一个元素在A中的序号
B(ii) = A(index{ii, 1}(1)); %%% idex{ii,1}序号的共同元素是B(ii)
end
disp(B)
celldisp(index) % index{1},index{2},...查看具体B(ii)序号
【 在 labi 的大作中提到: 】
: a=[2,6,4,6,7,8,3,5,6]
: 并得到这三个6的位置b=[2,4,9]
: 有木有一句实现的函数
: ...................
【 在 iamsai 的大作中提到: 】
: %想了一个很恶心的办法,算法的性能很差. 主要想利用库函数unique()的特性
: clear
: clc
: ...................
谢谢!~
很强啊。unique这命令也很强大
就是我这边unique(A,'first')会出错,unique(A)就没问题。
first和last是什么。
我用的是2007b的。
'first'是指b中的对应元素在A中第一次出现的标号(m就是用来放标号的);
‘last'则是最后一次出现的标号。
【 在 labi 的大作中提到: 】
: 谢谢!~
: 很强啊。unique这命令也很强大
: 就是我这边unique(A,'first')会出错,unique(A)就没问题。
: ...................
【 在 iamsai 的大作中提到: 】
: 我用的是2007b的。
: 'first'是指b中的对应元素在A中第一次出现的标号(m就是用来放标号的);
: ‘last'则是最后一次出现的标号。
喔。那6.5没有这个
直接默认出来的是last
[em17]
呵呵,只有’last‘也没有关系。把 A 倒序一次得到A_temp, 再对A_temp用unique。若b中同一个元素的对应的m1,m2相加的结果不是 length(A) + 1 的话,那么说明这个元素重复出现了。
【 在 labi 的大作中提到: 】
: 喔。那6.5没有这个
: 直接默认出来的是last
: [em17]