필터 지우기
필터 지우기

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

조회 수: 1 (최근 30일)
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
Joe
Joe 2015년 6월 15일
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!

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2015년 6월 5일
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.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by