Borrar filtros
Borrar filtros

How can I make indexing faster, that is, searching for a groups of numbers within a matrix?

1 visualización (últimos 30 días)
Hello!
I was wondering if there was anything faster than this:
X = ( Y1 < a & Y1 >= b & Y2 >= c & Y2 < d );
I run it in a loop a lot and it is by far taking up the most time. X is a group of numbers that meets 4 conditions. I am searching two large matrices, Y1 and Y2 for numbers that meets that condition. Anyone have an easier way?
I am on Matlab 2015a, 64bit, 120GB Ram, and blazing fast processors.
Thanks!
  11 comentarios
Joe
Joe el 15 de Jun. de 2015
James,
I implemented this code and it reduced the time it takes to run that code ~50 - 80%!! Great! Thank you very much. I am now looking at mex'ing other lines of code to get (hopefully) similar speed ups. Thanks again!

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 5 de Jun. de 2015
In the special case that a relatively small fraction satisfies one of the conditions, and letting letting C1, C2, C3, C4 be the conditions ranked from least to most probable, such as C1 being "Y1 >= B", then you might try:
X( (((sparse(C1) & C2) & C3) & C4 )
for example
X( ((sparse(Y1 >= B) & (Y2 < d)) & (Y2 >= c)) & (Y1 < a) )
I don't promise it will be faster, but in theory it could be.
Note: this has more overhead than the way you used, so your occupancy needs to b less than... ummm, perhaps 1/4 maybe... before this gets speedup.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by