Avatar billede jgthb Nybegynder
18. januar 2008 - 23:25 Der er 3 kommentarer og
1 løsning

Beregninger for tunge ved to for løkker

Hej

Jeg benytter to for-løkker i min kode til at tjekke, hvilke elementer i to vektorer (arrays) som er ens, men det tager dog lige lovlig langt tid. Kan man gøre noget mere effektivt? Programmet laves i matlab, men jeg håber ikke, dette afholder jer fra at kigge på det (det ligner trods alt de fleste andre sprog). Eneste funktion, som nogle af jer nok ikke kender er "find", men den finder blot de pladser i en matrix, hvis elementer er lig med noget. Men dette kan dog være ligegyldigt, da det blot er selve det at finde de værdier, som både er i den ene vektor (søjle rettere sagt) og den, som skal findes. Her er koden:

% Sætter Outputtet til at være en tom variabel.
MuligeSensorer = [];

% Går alle igennem i Kendt.
for i = 1:length(Kendt)
    % Går for hver af disse alle igennem i Naboer.
    for j = 1:length(Naboer)
        % Tjekker at de to elementer er lig hinanden, og at elementet ikke svarer til et kendt
        % punkt. Og tilføjer i så fald elementet (j,2) til output-matricen.
        if Naboer(j,1) == Kendt(i,1) && ...
                length(find(Kendt == Naboer(j,2))) == 0
            MuligeSensorer = [MuligeSensorer; Naboer(j,2)];
        end
    end
end;
Avatar billede jgthb Nybegynder
19. januar 2008 - 00:02 #1
tja...har da fået det optimeret en smule. Men overhovedet ikke nok:

MuligeSensorer = [];

for i = 1:length(Kendt)
    A = find(Naboer(:,1) == Kendt(i,1));
    for j = 1:length(A)
        if length(find(Kendt(:,1) == Naboer(A(j),2))) == 0
            MuligeSensorer = [MuligeSensorer; Naboer(A(j),2)];
        end
    end
end;
Avatar billede roenving Novice
19. januar 2008 - 15:30 #2
Hvad er det, du checker, når du undersøger, at A(j),2 ikke findes i Kendt ?-)

For hvis det er, at den ene A(j)-værdi skal findes og den anden ikke må, tror jeg ikke du kan optimere mere uden at gå i mere maskinnær kode !-)
Avatar billede tjacob Juniormester
22. januar 2008 - 12:03 #3
Hvis du blot skal finde matches mellem de to arrays, så kan du vel springe ud af det indre loop ved match? Og spare nogle iterationer i det indre loop?
Avatar billede jgthb Nybegynder
06. november 2008 - 01:03 #4
lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester