Array
uppgift:
Du har matrisen
B = [ 81 12 1 1; 23 1 23 1; 32 1 43 11; 1 1 23 1; 34 67 15 16; 61 27 11 12; 89 72 12 33; 89 10 22 11]
Skriv ut den rad som innehåller flest ettor.
lösning:
% Låt C vara lika stor som B med 0:or där B inte har en etta och 1 där B har en etta
C = B
C(C~=1) = 0
% Räkna ettorna i varje rad
D = sum(C, 2)
% Ta fram indexet med största antalet ettorna
find(D == max(D))
Varför skriver de C = B och C(C~=1) = 0?? hänger inte riktigt med här.
Jag tänkte såhär att ettorindex=(B==1 ) och fick logical arrayen
0 0 1 1
0 1 0 1
0 1 0 0
1 1 0 1
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Men viste inte hur man kan gå rad för rad och hitta den raden som har flest ettor. Tänkte summera ettor rad för rad men lyckades ej.
C=B är för att få C på samma dimension som B, sen nollar man ut de element som är skilda från 1 med C(C~=1) = 0.
Där använder man logisk indexering; C~=1 är en logisk matris med 1:or där elementen är skilda från 1.
C(C~=1) = 0 sätter alltså elementen i C till 0 där det inte var ettor från början.
Du är nästan framme med din lösning, du behöver bara göra de sista stegen (från kommentaren "Räkna ettorna i varje rad" med C utbytt mot ettorindex.
Tips: Gör 'help sum' och experimentera lite med att summera åt olika håll; man kan ofta välja i vilken ledd (dimension) av en matris som kommandot jobbar.
Taack för hjälpen!!