使用matlab在矩阵中找到一些值的更快方法

时间:2016-10-14 03:41:35

标签: arrays matlab sorting matrix numbers

我有一个矩阵,我试图找到我得到一个值的地方。所以,我使用find(x==y)来制作带有值的向量,例如:

n11=find(x==11)
n4=find(x==4)
n8=find(x==8)

n11,n4,n8的长度不同。

有时候,对于20或30个不同的x值,我必须做20或30次,所以如果我想获得x∈[1991,2015] find(x==1991) to find(x==2015)的间隔我怎么能无需执行

即可更快地获取这些值
find(x==1991)
.
.
.
find(x==2015)

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用logical indexing

n= find(x>=1991 & x<=2015)

修改

meshgrid可用于获取每年的向量:

x= [1991 1992 1991 2015 2016 1992 1988 1994]; % example data
[m,n]= meshgrid(x,1991:2015); % the second argument contains the years we need
n= (m==n);

现在n(1,:)等于x==1991n(2,:)等于x==1992等; find(n(1,:))等于find(x==1991)等。

答案 1 :(得分:0)

您可以使用矩阵来保存结果。并使用“for loop”自动执行。

start=1991;
endi=2015;
for i=start:endi
    num_column=size(find(x==i),1)
    mat(i-start+1,1:num_column)=find(x==i);
end

在每一行中,我们有一个值忽略零数的结果。