Creare una matrice

di il
5 risposte

Creare una matrice

Ciao, voglio creare una matrice partendo da dei dati su un file txt. Questo è costituito da tre colonne ( una data, numero, numero). Come creo la matrice mi da errore. Questo è il codice:
[data, CVA, CIMA]=textread('C:\""\Matrice1.txt','%s %f %f');
matrix = [data, CVA, CIMA]
Questo è l'errore:
Error using horzcat
Dimensions of arrays being concatenated are not consistent. Consider converting input arrays to the
same type before concatenating.

Error in Untitled9 (line 2)
matrix = [data, CVA, CIMA]
Perchè?

5 Risposte

  • Re: Creare una matrice

    Le matrici in MatLab non possono contenere un mix di stringhe (nel tuo caso le date) e numeri.
    Se vuoi un'unica struttura dati devi usare un cellarray.

    .
    Prova ad usare textscan.

    La funzione "textscan" ritorna un cellarray
    
    fp=fopen('a.txt','r');
    data=textscan(fp,'%s %d %d');
    fclose (fp)
    
  • Re: Creare una matrice

    Aprendo il file cosi, mi restituisce data = 1 per 3 cell . Apro il data e vedo una tabella avente una riga e tre colonne . In ogni elemento della tabella c'è scritto ( 1 per 2850) e se clicco li vedo finalmente i dati. Io vorrei semplicemente avere una tabella con data, numero, numero e poter togliere delle righe alla mia tabella in base a una condizione.
  • Re: Creare una matrice

    Aprendo il file cosi, mi restituisce data = 1 per 3 cell . Apro il data e vedo una tabella avente una riga e tre colonne . In ogni elemento della tabella c'è scritto ( 1 per 2850) e se clicco li vedo finalmente i dati. Io vorrei semplicemente avere una tabella con data, numero, numero e poter togliere delle righe alla mia tabella in base a una condizione.
  • Re: Creare una matrice

    Come detto nella risposta precedente, non puoi avere una matrice che contenga sia stringhe di caratteri (le date) che numeri.
    L'unica alternativa è usare un cellarray.
    Questo è quello che fa la funzione "textscan".

    Partendo da cellarray puoi creare due matrici: una di caratteri per le date, una con i valori.

    Prendendo ad esempio un semplice file di testo:
    
    2020-01-21 123 33
    2020-01-21 123 333
    2020-01-21 123 3333
    
    Puoi creare le due matrici "date_mat" e "valori" così:
    
    fp=fopen('a.txt','r');
    
    data=textscan(fp,'%s %f %f');
    fclose (fp)
    
    date_mat=x=char(data{1})
    valori=[data{2:3}] 
    
    
  • Re: Creare una matrice

    Ho risolto trasformando la data in tre numeri : anno mese e giorno ! cosi posso avere un unica matrice! grazie mille!
Devi accedere o registrarti per scrivere nel forum
5 risposte