matlab中,如何确定向量中第二大数的位置

如 a=[100,1,1,1,2,2,2,1,4,1,2,5,99,0,0,1,1,1,2];
怎样想确定99的位置?
最好用的find函数
这个是我自己编的:
[y,x]=sort(a);
y(end-1) %为第二大数
x(end-1) %为第二大数的位置
但是,如果数据量是225000,排序本身就会浪费时间和内存,并且还新添变量y,x;
很浪费,
求更好的的方法~~~

%将以下程序直接考入运行即可
a=[100,1,1,1,2,2,2,1,4,1,2,5,99,0,0,1,1,1,2];%用来测试程序的向量
[max_value max_position]=max(a);%先得到最大值的数值和位置
a(max_position)=min(a);
%将最大值的数值用向量最小值替代,这样第二大的值就变成了最大值,且所在位置不变
[max_value_2 max_position_2]=max(a)%这时取出的最大值就是我们所需要的第二大值了
a(max_position)=max_value;%记得将刚才的最大值复原,保持向量的完整性
%本程序不用sort函数,数据量很大时速度也非常快
%运行过程只产生4个中间变量,几乎不占用空间,您不妨试试
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-08
思路:先找到第一大的数,然后排除第一大的数。这时最大的数就是第二大的数。
考虑到第一大的数,或者第二大的数,可能同一个数在向量中出现多次,不建议使用max返回的下标,建议使用find函数

给出代码如下:
clc;clear;
a=randi(10,1,10)%生成随机整数向量
[t,index]=sort(a);%向量升序排序
index_m=find(t==t(end));%找到最大值占有的位置
target=t(index_m(1)-1)%找到第二大的值并显示
index(t==target)%显示第二大的值在原向量的位置

运行结果如下:
a =

5 5 7 8 8 3 7 7 2 2

target =

7

ans =

3 7 8

如果使用max返回的位置,由于max只返回一个最大值的位置,当有多个最大值时会失效。
第2个回答  2011-03-11
你不想添加数组的话,
也可以,用sort和find联合。
aa=sort(a);
find(a==aa(end-1))

或者你先find一次,然后将最大位置的值去掉或者设成Nan之前的数。但如果有多个并列第一或第二,你的结果自己得注意一下。
第3个回答  2015-11-08
采用函数subplot(N,M,N*M)
N为窗口水平分割的图像数目,M为窗口竖直分割的图像数目,后面的N*M为第几个图像
例如:
x=[1:10];
subplot(211)
plot(x,y,'r')
subplot(212)
plot(x,2*y,'m')
第4个回答  2011-03-12
[k]=find(a==max(a)-1);
k就是那个位置了