Ho un enorme numero di dati, con 7 colonne e 20000 righe. Lascio che Matlab legga mydata:
[tdata zdata kdata ldata mdata ndata pdata]=textread("mydata.txt")
Ma quello di cui ho bisogno è qualcos'altro. Voglio lasciare che Matlab raccolga ogni 1000. Riga dai dati. Aiuta a Textread a dare una spiegazione per il primo ennesimo dato:
[tdata zdata kdata ldata mdata ndata pdata]=textread("mydata.txt",n).
C'è un modo per farlo con una piccola modifica del formato textread? O dovrei scrivere un ciclo for?
risposte:
2 per risposta № 1Probabilmente è più facile se leggi tutti i dati e successivamente ritagli i dati indesiderati:
[tdata zdata kdata ldata mdata ndata pdata] = textread("mydata.txt")
tdata = tdata(1:1000:end);
zdata = zdata(1:1000:end);
kdata = kdata(1:1000:end);
ldata = ldata(1:1000:end);
mdata = mdata(1:1000:end);
ndata = ndata(1:1000:end);
pdata = pdata(1:1000:end);
Se l'overhead di memoria è troppo grande o lo trovi inaccettabile, dovrai scrivere un ciclo con fgetl
, qualcosa in questo senso:
fid = fopen("mydata.txt", "r");
i = 0;
while (~feof(fid))
i = i + 1;
line = fgetl(fid);
if mod(i, 1000) == 0
parsed = textscan(line, "%f%f%f%f%f%f");
%# etc.
end
end