2013-04-08 6 views
6

Non ho molta familiarità con Matlab quindi mi scuso per questa stupida domanda in anticipo. Vorrei assegnare il numero 1 ad alcune posizioni specifiche di una matrice. Ho un vettore riga e il vettore colonna corrispondente. Ho provato ad assegnare valori a queste posizioni diverse volte. Tuttavia, non ha funzionato. Ecco un esempio di codici di dimensioni più piccole. Supponiamo che ci sia una matrice 4 * 4 e vorrei assegnare matrice (1,1), matrice (2,3) e matrice (3,4) a 1. Questo è quello che ho fatto.Come assegnare un valore a posizioni specifiche di una matrice in MATLAB?

matrix = zeros(4,4); 
row = [1 2 3]; 
col = [1 3 4]; 
matrix(row,col)=1; 

Tuttavia, ho ottenuto risposta come

matrix=[ 1 0 1 1 
     1 0 1 1 
     1 0 1 1 
     0 0 0 0]  

Qualcuno può sottolineare quello che faccio male qui? La dimensione effettiva della matrice su cui sto lavorando è in migliaia quindi è per questo che non posso assegnare manualmente quelle posizioni una alla volta. C'è un modo per usare il vettore di riga e il vettore di colonna devo assegnare il valore 1? La ringrazio molto,

+2

Può essere utile: http://stackoverflow.com/questions/6850368/how-can-i-change-the-values-of-multiple-points-in-a-matri x? rq = 1 –

+0

Grazie mille. Ho controllato il post ed è molto utile. – Cassie

risposta

8

È possibile utilizzare sub2ind per calcolare gli indici lineari delle posizioni che si desidera assegnare e utilizzare quelli per l'assegnazione:

indices = sub2ind(size(matrix), row, col); 
matrix(indices) = 1; 
+0

Grazie mille. Ha funzionato ! – Cassie

1
matrix(1,1) = 1 
matrix(2,3) = 1 
matrix(3,4) = 1 
+2

Grazie mille per aver risposto. Tuttavia, la dimensione effettiva della mia matrice è in migliaia. Non posso assegnare uno per uno. Quindi c'è comunque da usare il vettore di riga e il vettore di colonna che ho? Grazie – Cassie

1

Un po 'di un urto. A meno che non si sta facendo un bel paio di righe o colonne non contigue, un modo molto utile è come

matrix(1:3,2:4)=1 

Supporta elemento math molto facilmente

questo si trasformerebbe

{0 0 0 0} 
{0 0 0 0} 
{0 0 0 0} 
{0 0 0 0} 

in

{0 1 1 1} 
{0 1 1 1} 
{0 1 1 1} 
{0 0 0 0}