2 svar
49 visningar
I am Me behöver inte mer hjälp
I am Me 711
Postad: 28 okt 2022 10:18

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. 

Matsmats Online 571 – Livehjälpare
Postad: 28 okt 2022 10:47

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.

I am Me 711
Postad: 28 okt 2022 21:46

Taack för hjälpen!!

Svara
Close