View Full Version : [matlab] esportare file di testo
pietro84
06-03-2008, 23:51
ho una grossa mole di dati da elaborare; questi dati sono costituiti da una matrice di 7000*7000 elementi. ora devo fare dei calcoli su questi elementi per effettuare una normalizzazione. la matrice va data in pasto a un sw diverso da Matlab, mi chiedo però se posso normalizzare i dati importando il file txt in matlab, normalizzando, ed esportando ancora in formato txt la matrice risultante.
Ho trovato un piccolo problema: quando matlab salva il risultato su file lo fa in notazione esponenziale, per esempio :
1.000e-001 anzichè 0.001
c'è qualche modo per ovviare ?
sull'help non c'è scritto nulla.
ho una grossa mole di dati da elaborare; questi dati sono costituiti da una matrice di 7000*7000 elementi. ora devo fare dei calcoli su questi elementi per effettuare una normalizzazione. la matrice va data in pasto a un sw diverso da Matlab, mi chiedo però se posso normalizzare i dati importando il file txt in matlab, normalizzando, ed esportando ancora in formato txt la matrice risultante.
Ho trovato un piccolo problema: quando matlab salva il risultato su file lo fa in notazione esponenziale, per esempio :
1.000e-001 anzichè 0.001
c'è qualche modo per ovviare ?
sull'help non c'è scritto nulla.
Per salvare in formato testo, usa il comando
SAVE file.txt <nome variabile> -ASCII -DOUBLE
-ASCII salva in formato testo
-DOUBLE salva con 16 cifre decimali
Se vuoi il file TAB separated anzichè comma separated, aggiungi -TABS in coda
Per leggere il file di nuovo, usa textread. Preso dall'help di textread:
To read all numeric data from a delimited text file, use a single output
argument, empty format string, and the appropriate delimiter. For
example, suppose data.csv contains:
1,2,3,4
5,6,7,8
9,10,11,12
Read the whole matrix into a single variable:
[data] = textread('data.csv','','delimiter',',');
Ciao. :)
pietro84
07-03-2008, 08:22
Per salvare in formato testo, usa il comando
SAVE file.txt <nome variabile> -ASCII -DOUBLE
-ASCII salva in formato testo
-DOUBLE salva con 16 cifre decimali
Se vuoi il file TAB separated anzichè comma separated, aggiungi -TABS in coda
Per leggere il file di nuovo, usa textread. Preso dall'help di textread:
To read all numeric data from a delimited text file, use a single output
argument, empty format string, and the appropriate delimiter. For
example, suppose data.csv contains:
1,2,3,4
5,6,7,8
9,10,11,12
Read the whole matrix into a single variable:
[data] = textread('data.csv','','delimiter',',');
Ciao. :)
ciao :)
io utilizzo il comando :
save <nomefile> <nomevariabile> -ASCII
il problema è che Matlab inserisce nel file di testo la fastidiosa notazione esponenziale:
cioè 0.1 lo salva come 1.0e-001
si può evitare?
ciao :)
io utilizzo il comando :
save <nomefile> <nomevariabile> -ASCII
il problema è che Matlab inserisce nel file di testo la fastidiosa notazione esponenziale:
cioè 0.1 lo salva come 1.0e-001
si può evitare?
Mettendo -SINGLE hai 8 cifre dopo la virgola e senza notazione esponenziale (per numeri non troppo piccolo o grandi, mi pare, ma dovresti verificare). Con -DOUBLE stessa cosa, ma con 16 cifre... :)
pietro84
07-03-2008, 09:44
Mettendo -SINGLE hai 8 cifre dopo la virgola e senza notazione esponenziale (per numeri non troppo piccolo o grandi, mi pare, ma dovresti verificare). Con -DOUBLE stessa cosa, ma con 16 cifre... :)
niente :muro:
continua a mettermi la notazione esponenziale sia con l'opzione -DOUBLE che con l'opzione -SINGLE .
ho la versione 2007b
niente :muro:
continua a mettermi la notazione esponenziale sia con l'opzione -DOUBLE che con l'opzione -SINGLE .
ho la versione 2007b
Prova a digitare FORMAT LONG G prima del SAVE... ;)
Poi come ultima spiaggia potresti digitare:
diary('file.txt')
for i=1:7000
disp(sprintf('%.20f,', matrice(i,: )))
end
diary off
pietro84
07-03-2008, 11:05
Prova a digitare FORMAT LONG G prima del SAVE... ;)
nulla da fare.. un'altra alternativa sarebbe di usare il comando fprintf ... ora provo con questa o scrivo un apposito programmino C.
usando diary mi stampa anche altra immondizia come gli stessi comandi che digito.
nulla da fare.. un'altra alternativa sarebbe di usare il comando fprintf ... ora provo con questa o scrivo un apposito programmino C.
usando diary mi stampa anche altra immondizia come gli stessi comandi che digito.
Devi fare uno script (un file .m)... ;) Però l'idea del fprintf è migliore... Solo che è un po' più lungo: ci vuole il doppio for e devi dare un fprintf(fid,'\n') alla fine di ogni riga... ;)
pietro84
07-03-2008, 11:20
Devi fare uno script (un file .m)... ;) Però l'idea del fprintf è migliore... Solo che è un po' più lungo: ci vuole il doppio for e devi dare un fprintf(fid,'\n') alla fine di ogni riga... ;)
anche se faccio un script mi stampa cmq i comandi disp(matrice(1,1)) e diary off , cmq ora opto per il comando fprintf... grazie per l'aiuto :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.