Simplifying for-find loop functions to speed up processing

8 visualizzazioni (ultimi 30 giorni)
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 Commenti
Torsten
Torsten il 26 Gen 2024
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.
Cameron
Cameron il 26 Gen 2024
Oops, good catch, that's my mistake, that should be mD(i,:)

Accedi per commentare.

Risposta accettata

Dyuman Joshi
Dyuman Joshi il 26 Gen 2024
Modificato: Dyuman Joshi il 26 Gen 2024
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.

Più risposte (1)

Cameron
Cameron il 26 Gen 2024
Modificato: Cameron il 26 Gen 2024
I've developed a better solution to the above, which is
[~,mD] = knnsearch(rcv,rcv,'K',5);
mD_thresh = find(mD>10);
[row,~] = ind2sub(size(mD),mD_thresh);
for i = 1:size(row,1)
rcv(i,:) = [];
end
This only takes a few seconds to run, but it sacrifices testing whether more than 3 values in the row are over the 10 threshold, and just deletes any row with a single value over the limit (preferable to a 200 hour run though). I also still feel there's a way to eliminate that for loop.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by