How can I improve this line of code perfomance wise?
조회 수: 1 (최근 30일)
이전 댓글 표시
When using the profiler to look at the performance of a function I need to work with, I saw that one line takes up much time
invalidIndex = any((coords<ddims(1:3)) | (coords>ddims(4:6)),2);
So it just checks if the point contained are within the bounds. The size of coords is nx3
Is there any way this line can be improved perfomance wise. I couldn't think of anything else...
댓글 수: 2
Walter Roberson
2023년 8월 8일
You could try unvectorizing it and seeing how much difference that makes:
invalidIndex = coords(:,1)<ddims(1) | coords(:,2)<ddims(2) | coords(:,3)<ddims(3) | coords(:,1)>ddims(4) | coords(:,2)>ddims(5) | coords(:,3)>ddims(6);
My expectation is that this would be notably slower... but that you would have to measure the timing to be sure.
답변 (1개)
Karan Singh
2025년 2월 1일
In addition to what Walter stated, you can slo try to precompute bounds to avoid repested indexing.
In the original code, every time the condition (coords < ddims(1:3)) | (coords > ddims(4:6)) runs:
- ddims(1:3) and ddims(4:6) are accessed twice (one for < and one for >).
- MATLAB performs indexing operations multiple times, which can be slow for large datasets.
lowerBounds = ddims(1:3);
upperBounds = ddims(4:6);
invalidIndex = (coords(:,1) < lowerBounds(1)) | (coords(:,1) > upperBounds(1)) | ...
(coords(:,2) < lowerBounds(2)) | (coords(:,2) > upperBounds(2)) | ...
(coords(:,3) < lowerBounds(3)) | (coords(:,3) > upperBounds(3));
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!