Compilazione dati in matrice 3d da tabella

di il
3 risposte

Compilazione dati in matrice 3d da tabella

Buonasera a tutti,
sto imparando a utilizzare Matlab; non avendo però mai avuto esperienze di programmazione il mio livello è molto scarso .
Vi spiego il mio problema.
La matrice 3d, che ho preallocato, ha dimensioni 14 x 12 x 78.
Attualmente la mia matrice ha tutti valori nulli al suo interno e io dovrei compilarla con una serie di dati che ho in excel i quali sono costituiti da un totale di 7 colonne di cui la n° 4 ha espressione letterale, in particolare 'L' o 'R' indicante il lato.
I dati su excel sono organizzati in questo modo:
Corridoio | Colonna | Livello | Lato | Posizione | Profondità | Peso |

Il numero del corridoio, il lato, la posizione e la profondità utilizzati in combinazione mi permettono manualmente di capire in che cella della mia matrice ho il peso.
Sto cercando di automatizzare la compilazione della matrice 3d con una serie di cicli for (è il metodo giusto?) dove per adesso i dati da excel li ho importati come tabella.

il ciclo for però non mi funziona con i dati in tabella e non so come risolvere il problema .

for i=1:14;
    for j=1:12;
        for k=1:78;
            for x=1:13104;    
                for y=1:7;
    if SW120180401(x,1)==1 && SW120180401(x,4)=='L' && SW120180401(x,6)==1;        
        P(i,j,k)=P(:,2,:);
    end
                end
            end
        end
    end
end
Ringrazio in anticipo chi avrà tempo e voglia di aiutarmi.

3 Risposte

  • Re: Compilazione dati in matrice 3d da tabella

    Non si può fare questo
    P(i,j,k)=P(:,2,:);
    perché P(i,j,k) è un valore e P(:,2,:) è una matrice, puoi scrivere un esempio di cosa vuoi fare?
  • Re: Compilazione dati in matrice 3d da tabella

    Provo a fare un esempio ma non sarà semplice.
    Ipotizziamo di dover riempire con i pesi determinati su excel una matrice P (i,j,k) 2 x 4 x 4, in questo esempio ipotizziamo che ci sia un solo corridoio che si trova tra j =2 e j=3.
    Supponiamo anche di avere 2 Colonne e che tra ogni colonna io abbia due Posizioni.


    Livello = 1:2 -> indicante il numero di righe, da questo valore determino i

    Corridoio = 1 -> è una variabile collegata al j che mi serve per scegliere il range di colonne j nelle quali potrebbe essere posizionato il peso
    Lato = 'L' oppure 'R' -> questo mi permette di capire se devo usare le colonne j di sinistra o di destra della mia matrice P
    Profondità = 1:2 -> una volta determinato il corridoio e il lato mi dice se devo usare la colonna j più vicina al corridoio o quella più interna

    Colonna =1:2 -> collegato alla profondità della matrice, da questo determino il valore di k insieme alla Posizione
    Posizione = 1:2 -> mi dice la profondità k

    Esempio numerico:

    |Corridoio | Colonna | Livello | Lato | Posizione | Profondità | Peso |
    1 1 1 L 1 2 10
    1 1 2 R 1 1 5
    1 2 2 L 2 2 8
    
    P=cat(3,zeros(2,4),zeros(2,4));
    P(:,:,1)=0;
    P(:,:,2)=0;
    P(:,:,3)=0;
    P(:,:,4)=0;
    
    P(1,3,1)=5;
    P(2,1,1)=10;
    P(1,1,4)=8;
    
    disp(P(:,:,1))
    disp(P(:,:,2))
    disp(P(:,:,3))
    disp(P(:,:,4))
    
    
    il codice sicuramente può essere scritto meglio ma al momento anche per preallocare le matrici sto facendo così, l ho messo perchè così puoi visualizzare il risultato che mi rendo conto possa non essere di semplice interpretazione anche con questo esempio.

    Intanto ti ringrazio per la risposta!!
  • Re: Compilazione dati in matrice 3d da tabella

    P.S.
    ho appena scoperto che se avessi scritto
    
    P = zeros(2,4,4);
    
    avrei ottenuto lo stesso risultato con una sola riga di codice
Devi accedere o registrarti per scrivere nel forum
3 risposte