我有一个包含1000行和100000列的.txt文件。一个10GB的文本文件,包含我需要分析的模拟结果(实数)。
我的数据格式为:[0.5 0.3 0.45 .. ;
0.4 0.22 0.21587 .. ;
0.1359 1.054 1.1 ... ]
(用空格和线条分隔)
如果我尝试使用A=load('Data.txt')
将整个文件加载到矩阵中(在Matlab中),我会收到一条错误消息:“内存不足”,我认为这意味着 - RAM(对吗?)。
我希望一次只能从文件中读取一行到1d数组。我怎么做?
我已经尝试过不同版本的A=load('Data.txt')(1,:)
或A=load('Data.txt'(1,:))
等等。
C代码中的答案也将受到赞赏。谢谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果效率不是太大,可以使用eval语句。
fid = fopen('output.txt'); % Open the file
numRun = 10; % The number of simulations
for ii = 1:numRun
ln = fgetl(fid);
eval( sprintf('a=%s;', ln) );
% Do stuff
end
但是,我认为更好的方法是为每个运行提供自己的特殊文件,然后像正常一样阅读。这样您就不必担心来自eval语句或整体eval开销的ghost变量。
fid = fopen('output.txt'); % Open the file
numRun = 10; % The number of simulations
for ii = 1:numRun
ofid = fopen(sprintf('output%i.txt', ii), 'w')
ln = fgetl(fid); % Read the line
fprintf( ofid, ln );
fclose( fid );
end
答案 2 :(得分:0)
这应该做你想要的:
fid = fopen('Data.txt');
while~feof(fid)
line = fgetl(fid);
C = textscan(line, '%f %f %f', 'Delimiter', ';');
data = cell2mat(C);
... Do you processing below
end
这将逐行处理数据。我还假设您的数据由;
字符分隔,并且您知道每行的长度,因此(%f %f %f
)。例如,这个:
0.5 0.3 0.45; 0.4 0.22 0.21587; 0.1359 1.054 1.1
将变为:
0.5000 0.3000 0.4500
0.4000 0.2200 0.2159
0.1359 1.0540 1.1000
目标是相同的:从数据中一次读取每一行,并 - 计算它的总和。 - user1611107
如果您要查找每行的总和,可以添加以下内容:
lSum = sum(data);