MATLAB: How to make indexing faster, that is, searching for a groups of numbers within a matrix

indexindexingsearchspeed up

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.

Best Answer

  • 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.