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)
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
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) ??
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)
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 ???
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 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 ???
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å?
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.
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.
Ahaaaa ok Tack för ditt svar!!