Risultati da 1 a 7 di 7

Discussione: Matlab

  1. #1
    Bava di vento
    Data Registrazione
    04/02/06
    Località
    Sorrento
    Età
    41
    Messaggi
    109
    Menzionato
    0 Post(s)

    Predefinito Matlab

    chi ne capisce un bel po???
    io molto poco sopratutto di cilci for e while
    ci faccio solo qualche operazione matriciale o ploting di dati modellistici , batimetrici e cose varie .
    adesso ho un problemino...

    per un modello numerico d'onda ho bisogno di un file batimetrico che altro non è che un grigliato di punti letto da nord a sud procedento da ovest verso est...in breve una bella matrice (191x14 adesso il mio problema è che il file che mi produno i maggiori software gis e vari hanno appunto un'unica colonna che altro non è che tutte le colonne del grigliato una sotto l'altra...lette sempre entrando da nord dalla prima colonna ad ovest e tornando a capo ogni fine colonna .
    in breve a me serve l'opposto devo scriverlo come se letto per righe e nn per colonne (è strano da spiegare lo so).

    concettualemte ho una grandissima colonna e ho bisogno di dividerla in tante colonne di 191 righe , "metterle una a fianco all'altra" , e poi trasporre tutte le righe in colonne , (della matrice ottenuta) mettendole una sotto l'altra .
    la parte finale la so fare il problema è...come faccio a dividere il mega vettore colonna iniziale in tanti vettori colonna da 191 elementi ...metterli uno a fianco all'altro e creare la matrice (che poi modificherò ulteriormente)???


    avevo pensato ad un ciclo for ma nn saprei da dove inizare

    qualcuno può aiutarmi (anche solo a capire/ragionare)???
    ve ne sarei molto grato


    spero di non aver sbagliato totalmente sezione eventualmente spostate
    saluti
    modello wrf hi-res italia-sud-campania su www.meteofree.net

  2. #2
    Burrasca
    Data Registrazione
    22/02/07
    Località
    Molino del Piano(FI)
    Messaggi
    5,587
    Menzionato
    0 Post(s)

    Predefinito Re: Matlab

    Citazione Originariamente Scritto da mistralf10 Visualizza Messaggio
    concettualemte ho una grandissima colonna e ho bisogno di dividerla in tante colonne di 191 righe , "metterle una a fianco all'altra" , e poi trasporre tutte le righe in colonne , (della matrice ottenuta) mettendole una sotto l'altra .
    Ciao,
    io non sono sicuro di aver capito .
    Facendo un esempio ridimensionato, tu hai una matrice del tipo:

    A=
    1
    2
    3
    4
    5
    6
    7
    8
    9

    e vorresti dividerla in colonne di 3 elementi (in realtà nel tuo caso 191), in maniera che divenga:
    A=1 4 7
    2 5 8
    3 6 9
    e poi fare la trasposta
    A=1 2 3
    4 5 6
    7 8 9

    E' così?
    Se fosse così in pratica sarebbe riportare i primi 191 elementi della colonna originaria nella prima riga, i secondi 191 elementi nelle seconda colonna, e così via?

    Chiaramente la colonna originale ha una dimensione multipla di 191, vero?

    Se è così provo a scriverti il codice, altrimenti rispiegami il problema

    Stazione meteo: Davis Vantage Vue; Luogo: Molino del Piano, 12 km a NE di Firenze; Alt.: 120 m; Sito web: www.firenzemeteo.it

  3. #3
    Bava di vento
    Data Registrazione
    04/02/06
    Località
    Sorrento
    Età
    41
    Messaggi
    109
    Menzionato
    0 Post(s)

    Predefinito Re: Matlab

    Ciao Controcorrente
    si il concetto è quello solo che alla fine nn devo fare la trasposta in quel modo ma devo fare un'ulteriore passo (o anche no) ovvero predere le colonne dell'ultima matrice che hai scritto e rimetterle tutte una sotto l'altra (concatenazione se nn erro è c=c( o qualcosa di simile )

    a =
    1
    4
    7
    2
    5
    8
    3
    6
    9


    il mio grid è 191x148 dunque 191 righe e 148 colonne (191 elementi della colonna dunque ogni 191 finisce la colonna che mi interessa e inizia l'altra)

    poi nn so se è possibile ma avendo il questi valori in un file .dat (un semplicissimo file di testo) come posso dirgli (in parole MOLTO POVERE) prendi i valori che mi interessano dal file ... e completate le istruzioni riscrivili in ...

    io i comandi per farlo su una matrice come quella che abbiamo usato noi come esempio li so (es : a=c(1:1:3) (anche se qualche passaggio mi manca)...solo che nn saprei iterare il tutto nel senso che pur volendolo fare per 148 volte e così via praticamente morirei

    poi avrei pensato ad un cilco for diccendogli di prendere il 1° poi il 191+1 elemento e così via e metterlo in una riga ma qui decedo...nn saprei farlo

    ti ringrazio anticipatamente
    modello wrf hi-res italia-sud-campania su www.meteofree.net

  4. #4
    Burrasca
    Data Registrazione
    22/02/07
    Località
    Molino del Piano(FI)
    Messaggi
    5,587
    Menzionato
    0 Post(s)

    Predefinito Re: Matlab

    Citazione Originariamente Scritto da mistralf10 Visualizza Messaggio
    i maggiori software gis e vari hanno appunto un'unica colonna che altro non è che tutte le colonne del grigliato una
    Qui dici di avere una matrice Nx1, mentre qui:
    Citazione Originariamente Scritto da mistralf10 Visualizza Messaggio
    il mio grid è 191x148
    dici che la matrice è 191x148



    Comunque, mettiamo che sia vera la prima :

    carichi il file con load:

    A=load('my_data.dat');

    conti i cicli per estrarre i dati:

    [righe,colonne]=size(A);
    cicli=righe/191;

    inizi un primo ciclo for che estrae 191 dati alla volta e li mette su delle righe:

    B=[];
    for k=1:cicli
    primo_elemento=1+191*(k-1);
    porzione_A=A(primo_elemento:1:primo_elemento+190,1);
    B=[B porzione_A];
    end

    La matrice B sarà fatta di N righe di 191 elementi;adesso prendo ciascuna riga e la metto a fianco alla precedente, creando la nuova matrice C:

    C=[];
    for k=1:191
    porzione_b=B(k,;
    C=[C porzione_b];
    end

    Mi serve la trasposta:

    A=C';
    Stazione meteo: Davis Vantage Vue; Luogo: Molino del Piano, 12 km a NE di Firenze; Alt.: 120 m; Sito web: www.firenzemeteo.it

  5. #5
    Burrasca
    Data Registrazione
    22/02/07
    Località
    Molino del Piano(FI)
    Messaggi
    5,587
    Menzionato
    0 Post(s)

    Predefinito Re: Matlab

    mi è venuto uno smile

    in realtà sarebbe porzione_b=B(k , : ) ;
    Stazione meteo: Davis Vantage Vue; Luogo: Molino del Piano, 12 km a NE di Firenze; Alt.: 120 m; Sito web: www.firenzemeteo.it

  6. #6
    Burrasca L'avatar di Borat
    Data Registrazione
    08/06/08
    Località
    -999
    Messaggi
    5,669
    Menzionato
    0 Post(s)

    Predefinito Re: Matlab

    Se il problema è prendere un vettore colonna di l elementi e dividerlo in j colonne di k righe in modo che J*k=l allora è un caso di from long to wide per Stata.

    Prova a usare Stata. Comando reshape, opzione "from long to wide". Prova a vedere in internet se trovi un demo gratuito di Stata.

    Se no in fortran ci dovrebbero essere i comandi per manipolare direttamente le matrici. Quello si trova gratis in google. Magari non il compilatore ma per una volta si può eseguire interpretato... Anche Shazam dovrebbe farti fare questa cosa senza complicazioni immettendo l'espressione matriciale che devi compiere così com'è. Non saprei se si trovi in giro Shazam però...

  7. #7
    Bava di vento
    Data Registrazione
    04/02/06
    Località
    Sorrento
    Età
    41
    Messaggi
    109
    Menzionato
    0 Post(s)

    Predefinito Re: Matlab

    perfetto stasera provo entrambe le cose matlab e a cercare ciò che dice borat e vi faccio sapere
    ancora grazie
    a + tardi
    modello wrf hi-res italia-sud-campania su www.meteofree.net

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •