Filter löschen
Filter löschen

Compare matrix element without loops

1 Ansicht (letzte 30 Tage)
shdotcom shdotcom
shdotcom shdotcom am 4 Mai 2019
Kommentiert: dpb am 4 Mai 2019
Hi,
Is there any way to get same result without using loops?
G = [5 8; 8 5; 3 9; 7 3; 1 4; 5 10; 6 7; 4 10; 4 7; 1 6];
n = 2;
nG = size(G,1);
for ii=1:nG
zz =1;
isDom = [];
for kk=1:n
for jj=1:nG
if ii ~= jj
isDom(zz) = G(ii,kk) < G(jj,kk);
zz = zz +1;
end
end
end
R(ii) = sum(isDom==1);
end

Akzeptierte Antwort

dpb
dpb am 4 Mai 2019
Bearbeitet: dpb am 4 Mai 2019
Not w/o zero loops, think not, but can reduce to one...
idx=1:nG; % working index array for element logical lookup/exclusion
R=zeros(nG,1); % preallocate
for i=1:nG
isDom=(G(i,:)-G(idx~=i,:));
R(i)=sum(isDom(:)<0);
end
You can eliminate the intermediate isDom temporary if desired..."exercise for the student" :)
  2 Kommentare
shdotcom shdotcom
shdotcom shdotcom am 4 Mai 2019
Thank you
dpb
dpb am 4 Mai 2019
You can also, of course, remove the explicit loop via arrayfun, but the loop is still there and resulting code is somewhat obfuscated and may well be slower, besides...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by