Qualcuno può spiegarmi la soluzione di questo esercizio:
Esercizio
Scrivi una funzione chiamata odd_index che prende una matrice, M
, come argomento di input e restituisce una matrice che contiene solo elementi di M
Quelli che sono in righe e colonne dispari. In altre parole, restituirebbe gli elementi di M
agli indici (1,1)
, (1,3)
, (1,5)
, ..., (3,1)
, (3,3)
, (3,5)
, ..., ecc. Quella nota sia la riga che la colonna di un elemento devono essere dispari per essere inclusi nell'output. Il seguente non sarebbe stato restituito: (1,2)
, (2,1)
, (2,2)
Perché la riga o la colonna o entrambi sono pari. Ad esempio, se M
Era una matrice 5 per 8, l'output deve essere quindi un 3 per 4 Perché la funzione omette le righe 2 e 4 di M
e omette anche le colonne 2, 4, 6 e 8 di M
.
Soluzione:
M_out = odd_index function (M)
M_out = M (1: 2: end, 1: 2: end);
end
Soluzione di collegamento: Restituisci solo elementi dispari
Qualcuno può spiegarmi come sono arrivati alla funzione M_out = M (1: 2: end, 1: 2: end) ;.
risposte:
1 per risposta № 1function M_out = odd_index (M)
M_out = M(1: 2: end, 1: 2: end);
end
Prendo ciascuno dispari elemento della matrice M
e lo restituisce a una matrice M_out
,
M = [1 2 3; 4 5 6;7 8 9];
M_out = odd_index(M)
M_out =
1 3
7 9
dove puoi vedere quegli elementi su una riga dispari e su una colonna dispari vengono stampati, ma gli elementi su righe pari e persino su colonne vengono esclusi.
Il trucco qui è di passare attraverso gli indici in passi di 2 invece di 1. M(1,1)
dà l'elemento nell'angolo in alto a sinistra di M
, cioè 1. M(1:2,1)
restituisce i primi due elementi nella colonna di sinistra: 1 e 4. Ciò accade perché n:m
crea un vettore di numeri in esecuzione da n
a m
in passaggi di 1. È possibile modificare questa dimensione di passaggio aggiungendo un numero: n:x:m
, dove x
specifica quanto sono grandi i tuoi passi. Dal momento che i numeri dispari sono 2 a parte, è sufficiente avviare il vettore con il numero più basso, positivo, dispari, 1 e il passo con la dimensione 2. L'ultimo elemento nel vettore 1:2:end
significa semplicemente "la fine del vettore", quindi, se M = [5x3]
il end
delle file è 5, perché ci sono cinque file e il end
delle colonne sarebbe 3, poiché ci sono tre colonne.