Creare due vettori in MatLab

Andre11221
Salve a tutti,
dovrei creare due vettori in Matlab e non so come fare. Il primo vettore è un vettore colonna del tipo:
a=[1 1 1 2 2 2 3 3 3...480 480 480]'
cioè un vettore che ripete per 3 volte 1, 2.. fino a 480.

il secondo vettore invece è sempre un vettore colonna che mette in fila tutte le riche di una matrice. Ad esempio se ho una matrice del tipo
A=[3 1 3;4 5 6;5 7 8]
il vettore sarebbe del tipo:
b=[313456578]'

So che la procuderua consiste in un ciclo for ma non so come impostarlo.
Grazie per l'aiuto.

Risposte
cooper1
Ciao e benvenut*. potresti fare i due cicli seguenti:

ES1:

arr = [];
for i =1:480
    arr = [arr; ones([3,1])*i];
end


ES2:

A=[3 1 3;4 5 6;5 7 8];
arr = [];

for k = 1:size(A,1)
    arr = [arr A(k,:)];
end
transpose(arr)

feddy
Ciao,
@cooper ti ha già risposto correttamente.

MatLab usa il più possibile la strategia copy-on-write per ottimizzare situazioni di questo tipo, quindi ha già delle routine fatte apposta per quello che ti serve. Ti consiglio di guardarne la documentazione :-)

1)
v = [1:480];
repelem(v,3)


2)
A=[3 1 3;4 5 6;5 7 8];
reshape(A.',1,[])'


Un consiglio generale se usi MatLab è di cercare di evitare cicli for "C-style" quando possibile, poiché questi rallentano terribilmente l'esecuzione del programma.

cooper1
bello il primo comando, non l'avevo mai visto.
al reshape potevo invece anche pensarci esistesse anche in Matlab.....

feddy
Sinceramente nemmeno io, non uso mai MatLab. Ma sapendo quanto vogliono evitare cicli for l'ho trovato googlando :-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.