2016-10-14 3 views
0

У меня есть матрица, и я пытаюсь найти, где я получаю значение. поэтому, я использую find(x==y) для создания векторов со значениями, например:Более быстрый способ найти значение в матрице с matlab

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

и N11, n4, n8 не такой же длины.

Иногда я должен делать это как 20 или 30 раз для 20 или 30 различных значений x, поэтому, если, например, я хочу получить интервал x∈ [1991,2015] find(x==1991) to find(x==2015), как я могу получить эти значения быстрее, не делая

find(x==1991) 
. 
. 
. 
find(x==2015) 

спасибо

ответ

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 

В каждой строке мы имеем результат одного значения, игнорируя нулевые числа.

1

Вы можете использовать logical indexing:

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

EDIT

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==1991, n(2,:) равна x==1992 и т. Д .; find(n(1,:)) равно find(x==1991) и т. Д.

+0

, но мне нужен вектор для каждого года. – neto333

+0

Я обновил ответ – AVK

Смежные вопросы