Vectorizing finding indexes
Mostrar comentarios más antiguos
hi, i have a vector X and a vector Y (both in ascending order). for every element in X i want the indexes of the values in Y between which this element lies. Actually, 1 index suffices (preferably the higher bound).
For example if have
Y=[0, 1, 2, 3, 4, 5]
X=[0.1, 2.5, 2.8, 4.1];
then I want to get as a result:
IND = [2 4 4 6]; %the higher bounds of the interval in Y in which the elements of X fall
I can do this with a for loop:
for ix=1:length(X);
IND(1,ix)=min(find(Y>X(ix)))
end
My question is whether it is possible to vectorize this, and how... Many thanks in advance!
Respuesta aceptada
Más respuestas (3)
Jamie Rodgers
el 24 de Jun. de 2012
Try This: Your vector
Y=[0:1:1000];
X=[0.1, 2.5, 2.8, 4.1];
Vectorised code
Z1=arrayfun(@(a)intersect(Y,ceil(a)),X);
idx=arrayfun(@(x)find(Y==x),Z1);
1 comentario
Sargondjani
el 24 de Jun. de 2012
Andrei Bobrov
el 24 de Jun. de 2012
[idx,~] = find(bsxfun(@eq,ceil(X(:)'),Y(:)))
1 comentario
Sargondjani
el 24 de Jun. de 2012
Sargondjani
el 24 de Jun. de 2012
0 votos
1 comentario
Walter Roberson
el 24 de Jun. de 2012
You are correct: the expressions given by Jamie and Andrei as of the time of my writing this comment, only work for integer Y. My histc() based code does not depend on Y being integer.
Categorías
Más información sobre Matrix Indexing en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!