Creazione matrice

di il
1 risposte

Creazione matrice

Salve a tutti. Sono nuovo del forum e spero di non sbagliare la sezione dove mettere la mia domanda. Vorrei fare la seguente operazione con Matlab:
Ho una matrice molto grande (che chiamerò A) dalla quale ne voglio creare una seconda (B). Le caratteristiche di B devono essere le seguenti:
1) la prima colonna deve riportare tutti i valori di A
2) la seconda colonna deve riportare il numero di riga di A da cui è stato trascritto il valore in prima colonna di B
3) la terza colonna deve riportare il numero di colonna di A da cui è stato trascritto il valore in prima colonna di B

Es. A=[11 22 33; 44 55 66; 77 88 99]
B=[11 1 1; 22 1 2; 33 1 3; 44 2 1; 55 2 2; 66 2 3; 77 3 1; 88 3 2; 99 3 3]

Esiste un operazione di Matlab che realizza un operazione simile? Io ho scritto un ciclo, ma per eseguire l'operazione ci mette molto tempo.

Grazie a tutti!

1 Risposte

  • Re: Creazione matrice

    Gli elementi della prima colonna della matrice B si possono generare accedendo alla matrice A come A(:) (la matrice A deve essere trasposta in quanto l'operatore ":" opera sulle colonne)

    Le righe 2 e 3 si possono generare all'interno di un semplice loop.

    Lo script in calce illustra una possibile implementazione del metodo proposto.

    Le istruzioni tic e toc, rispettivamente all'inizio ed alla fine dello script consentono di misurare il tempo di esecuzione dello script.
    
    % 
    % Inizializzazione calcolo tempo di esecuzione
    % 
    tic
    % 
    % Definizione matrice A e matrice di controllo B
    % 
    A=[11 22 33; 44 55 66; 77 88 99]
    % A=[11 22 33; 44 55 66; 77 88 99;100 200 300]
    % A=[11 22 33 100; 44 55 66 200; 77 88 99 300]
    % 
    % Identificazione del numero di righe (r) e colonne (c) della matrice A
    % 
    [r,c]=size(A);
    % 
    % Creazione prima colonna della matrice target (C1). La matrica A deve
    % essere trasposta in quanto l'istruzione "A(:)" concatena le colonne della
    % matrice
    % 
    A=A';
    C1=A(:);
    % 
    % Creazione della sezione base della terza colonna della matrice target (C)
    % 
    c_list=1:c;
    % 
    % Allocazione memoria per le colonne 2 e 3 della matrice target (C)
    % 
    C2=zeros(r*c,1);
    C3=zeros(r*c,1);
    % 
    % Loop per la costruzione delle colonne 2 e 3 della matrice target (C)
    % 
    for i=1:r
       idx=i+(i-1)*(c-1):i+(i-1)*(c-1)+(c-1);
       C2(idx)=ones(c,1)*i;
       C3(idx)=c_list;
    end
    % 
    % Costruzione della matrice target (C)
    % 
    C=[C1,C2,C3]
    % 
    % Calcolo tempo di esecuzione
    % 
    toc
    
    Hope this helps.
Devi accedere o registrarti per scrivere nel forum
1 risposte