Simplifying for-find loop functions to speed up processing
조회 수: 8 (최근 30일)
이전 댓글 표시
Hi all,
A pretty basic question, but I'm trying to find a more elegant solution to search through a 750,000x5 list to remove entries from a corresponding list when more than three value in any respective row are above a threshold of 10. The long way of doing so that I have is
% mD is a 750000 x 5 matrix containing distances to the nearest 5
% neighbors of the r,c,v point (from knnsearch) in each row
for i = size(r,1):-1:1
if size(find(mD(i,:)>10),2) > 3
r(i) = [];
c(i) = [];
v(i) = [];
end
end
댓글 수: 4
Torsten
2024년 1월 26일
Are there more than 3 values in mD row (i) above 10?
But you don't refer to row i of mD in your loop - you refer to the complete matrix mD with your find-command.
채택된 답변
Dyuman Joshi
2024년 1월 26일
편집: Dyuman Joshi
2024년 1월 26일
I assume r, c and v have the same number of rows -
%Check which rows from the given range in mD have more than 3 values greater than 10
idx = sum(mD(1:size(r,1),:)>10, 2)>3
%perform deletion
r(idx) = [];
c(idx) = [];
v(idx) = [];
If all the variables have the same number or rows then you can remove the indices used and just use mD.
댓글 수: 0
추가 답변 (1개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!