10 svar
130 visningar
I am Me behöver inte mer hjälp
I am Me 720
Postad: 27 okt 2022 07:32 Redigerad: 27 okt 2022 07:38

Vad är grejen med indexering och logisk indexering och när/ hur används de?

Hänger inte med lösningen. I programmering C skillnaden mellan = och == var att = betyder tilldelning och == lika med. Vad gäller i matlab? Jag trodde at det bildas alltid logisk array när man jämfört två matriser med varandra eller när man använder ==, >, < .  Hur ska man veta när bildas logisk indexering ? 

Första raden i lösningen alltså index = A == 4; säger för mig att hela radvektorn array ska vara lika med 4 och det ska sättas in i en variabel som heter index. 

uppgift:

Givet matriserna A och B nedan

A = [4 0 3; 2 4 6; 3 4 1]
B = [1 2 3; 4 5 6; 7 8 9]
Finn ett sätt att ersätta alla 4:or i A med elementet som finns på motsvarande plats i B.

Svar: 

index = A == 4;
A(index)=B(index)

Hondel 1389
Postad: 27 okt 2022 07:54

Det handlar väl om att i Matlab ska det vara enkelt att göra operationer med vektorer/matriser. Istället för att behöva skriva en loop som går igenom A och jämför varje element för sig ska man bara kunna skriva A==4 och får du en vektor med true och false på motsvarande platser där elementen i A är 4

I am Me 720
Postad: 27 okt 2022 08:42
Hondel skrev:

Det handlar väl om att i Matlab ska det vara enkelt att göra operationer med vektorer/matriser. Istället för att behöva skriva en loop som går igenom A och jämför varje element för sig ska man bara kunna skriva A==4 och får du en vektor med true och false på motsvarande platser där elementen i A är 4

ok, så du menar att med (index = A == 4;) bildas en logisk array som är

A =   1   0   0  

          0   1   0

        0    1     0

  och logiska skriv aldrig ut för att vi har ; på slutet av det. Men vad händer i nästa rad ?? här A(index)=B(index) ?? 

Hondel 1389
Postad: 27 okt 2022 09:20

Nja, det bildas en vektor som heter index och den har true/false eller 0/1 eller liknande på det sättet du skrivit. 

A(index) innebär sedan att de element som står på platser där index är true/1 plockas ut. Prova att printa ut index och A(index) (genom att lägga till exempelvis disp(index) och disp(A(index)) i koden)

I am Me 720
Postad: 27 okt 2022 10:05
Hondel skrev:

Nja, det bildas en vektor som heter index och den har true/false eller 0/1 eller liknande på det sättet du skrivit. 

A(index) innebär sedan att de element som står på platser där index är true/1 plockas ut. Prova att printa ut index och A(index) (genom att lägga till exempelvis disp(index) och disp(A(index)) i koden)

Aaaa precis det förstår ja att A(index) säger att de element som står på platser där index är true/1 ska plockas ut och det ger ett kolumn med 4   4  4 . Men hur kan B(index) ge ett matris där alla platser i A som hade talet 4 ersätts med andra tal från B ???

Hondel 1389
Postad: 27 okt 2022 12:34

Index säger vilka element i A som är 4

Så A(index) = B(index) ersätter värdena i A där index är 1 med de tal i B som står där index är 1

I am Me 720
Postad: 27 okt 2022 12:46
I am Me skrev:
Hondel skrev:

Nja, det bildas en vektor som heter index och den har true/false eller 0/1 eller liknande på det sättet du skrivit. 

A(index) innebär sedan att de element som står på platser där index är true/1 plockas ut. Prova att printa ut index och A(index) (genom att lägga till exempelvis disp(index) och disp(A(index)) i koden)

Aaaa precis det förstår ja att A(index) säger att de element som står på platser där index är true/1 ska plockas ut och det ger ett kolumn med 4   4  4 . Men hur kan A(index)= B(index) ge ett matris där alla platser i A som hade talet 4 ersätts med andra tal från B ???

Matsmats 571 – Livehjälpare
Postad: 27 okt 2022 16:57 Redigerad: 27 okt 2022 16:57

Det stämmer inte riktigt med en logisk vektor; du får en logisk matris av samma dimension som A.

Testa att skriva A==4, vad får du då?

I am Me 720
Postad: 27 okt 2022 18:17
Matsmats skrev:

Det stämmer inte riktigt med en logisk vektor; du får en logisk matris av samma dimension som A.

Testa att skriva A==4, vad får du då?

Jag får en logisk matris. 

Matsmats 571 – Livehjälpare
Postad: 27 okt 2022 18:27

Exakt, och med den kan du indexera i både A och B eftersom de båda har samma dimension.

I vänsterledet A(index) talar ettorna om vilka element du skall tilldela till och i högerledet B(index) vilka element du skall välja ut ur B.

I am Me 720
Postad: 27 okt 2022 18:30

Ahaaaa ok Tack för ditt svar!!

Svara
Close