Borrar filtros
Borrar filtros

find minumum indices of one array in another array

1 visualización (últimos 30 días)
Limei Cheng
Limei Cheng el 11 de Ag. de 2020
Comentada: Limei Cheng el 11 de Ag. de 2020
I have two arrays as below:
A= [ 47 100 153 207 261 314 368 422 474 527 581 635 687 741 794 847 900 954 1007 1060];
B=[301 602 903];
I'm trying find the indexA = [5 11 17] such that the corresponding elements in A(indexA)=[261 581 900] is the largest element that smaller than B. i.e.
A(indexA(i)) <=B(i) and is the largest element in A that smaller than B(i).
Here is my code using for loop:
for i=1:length(B)
indexA=length(find(A<=B(i));
end
Is there more simple way without using for loop?

Respuesta aceptada

Fangjun Jiang
Fangjun Jiang el 11 de Ag. de 2020
Editada: Fangjun Jiang el 11 de Ag. de 2020
You have the assumption that A is incremental. If it is always true, it can be done like this.
%%
A= [ 47 100 153 207 261 314 368 422 474 527 581 635 687 741 794 847 900 954 1007 1060];
B=[301 602 903];
indexA=sum(A'<=B)
indexA =
5 11 17
If A is not always incremental, you could do this. The one thing that you might not have been aware of is called "implict expansion", like C=A'-B in this case. In MATLAB® R2016b and later, you can directly use operators instead of bsxfun(), since the operators independently support implicit expansion of arrays with compatible sizes.
%%
A= [ 47 100 153 207 261 314 368 422 474 527 581 635 687 741 794 847 900 954 1007 1060];
B=[301 602 903];
C=A'-B;
C(C>=0)=nan;
[~,indexA]=max(C)
indexA =
5 11 17
  1 comentario
Limei Cheng
Limei Cheng el 11 de Ag. de 2020
Thx a lot. This one is about 4 times faster than my for loop solution
.

Iniciar sesión para comentar.

Más respuestas (1)

Bruno Luong
Bruno Luong el 11 de Ag. de 2020
A= [ 47 100 153 207 261 314 368 422 474 527 581 635 687 741 794 847 900 954 1007 1060];
B=[301 602 903];
[~,idxA]=histc(B,A)
Result
idxA =
5 11 17
  4 comentarios
Limei Cheng
Limei Cheng el 11 de Ag. de 2020
good job. Thx a lot. It's really fast.
Limei Cheng
Limei Cheng el 11 de Ag. de 2020
Can I use the histc function inside a parfor loop?

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by