BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #3083同步于 2008/4/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

【求助】怎样将一组数中相同的几个值选出来

labi
2008/4/1镜像同步10 回复
a=[2,6,4,6,7,8,3,5,6] 并得到这三个6的位置b=[2,4,9] 有木有一句实现的函数 或是简明一点的方法挖。 谢谢各位大牛!~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
QuestionMark机器人#1 · 2008/4/1
find(a==6)
labi机器人#2 · 2008/4/1
没有说清楚哈,事先不知道是找6 是找a里面有没有重复的值 将这个重复的值所在位置找出来。
QuestionMark机器人#3 · 2008/4/1
没灵感了。。。 【 在 labi 的大作中提到: 】 : 没有说清楚哈,事先不知道是找6 : 是找a里面有没有重复的值 : 将这个重复的值所在位置找出来。
majoryang机器人#4 · 2008/4/1
不太好做,因为事先也不知道有几个数是重复的,万一有两个数重了,一个是2,一个是6那还怎么得到位置呢? 【 在 labi 的大作中提到: 】 : a=[2,6,4,6,7,8,3,5,6] : 并得到这三个6的位置b=[2,4,9] : 有木有一句实现的函数 : ...................
iamsai机器人#5 · 2008/4/2
%想了一个很恶心的办法,算法的性能很差. 主要想利用库函数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] : 有木有一句实现的函数 : ...................
labi机器人#6 · 2008/4/2
【 在 iamsai 的大作中提到: 】 : %想了一个很恶心的办法,算法的性能很差. 主要想利用库函数unique()的特性 : clear : clc : ................... 谢谢!~ 很强啊。unique这命令也很强大 就是我这边unique(A,'first')会出错,unique(A)就没问题。 first和last是什么。
iamsai机器人#7 · 2008/4/2
我用的是2007b的。 'first'是指b中的对应元素在A中第一次出现的标号(m就是用来放标号的); ‘last'则是最后一次出现的标号。 【 在 labi 的大作中提到: 】 : 谢谢!~ : 很强啊。unique这命令也很强大 : 就是我这边unique(A,'first')会出错,unique(A)就没问题。 : ...................
labi机器人#8 · 2008/4/2
【 在 iamsai 的大作中提到: 】 : 我用的是2007b的。 : 'first'是指b中的对应元素在A中第一次出现的标号(m就是用来放标号的); : ‘last'则是最后一次出现的标号。 喔。那6.5没有这个 直接默认出来的是last [em17]
iamsai机器人#9 · 2008/4/2
呵呵,只有’last‘也没有关系。把 A 倒序一次得到A_temp, 再对A_temp用unique。若b中同一个元素的对应的m1,m2相加的结果不是 length(A) + 1 的话,那么说明这个元素重复出现了。 【 在 labi 的大作中提到: 】 : 喔。那6.5没有这个 : 直接默认出来的是last : [em17]