我正在写一个matlab程序,它读取大约500个文件.每个文件有20,000行,每行有1个数字.该程序尝试使用这些数字构建20,000*500的矩阵.数字存储为Double,因此每个数字为8个字节.所以我希望这需要20,000*500*8字节,大约是1E8,即100MB.然而这个程序耗尽了我的16GB内存.随着程序的运行,我看到内存使用率稳步上升,GB为GB.我在Ubuntu 14.04上使用Matlab R2015b.
发生了什么?非常感谢您的关注.
这是完整的代码
clear all;
% number of rna bits in the file
filesize = 20532
maxFiles = 480;
rnaCounts = NaN(filesize,maxFiles);
myFolder = '~/_STATS/data3/RNASeqV2/UNC__IlluminaHiSeq_RNASeqV2/Level_3';
filePattern = fullfile(myFolder, '*genes.normalized_results');
theFiles = dir(filePattern);
rnaCounts = NaN(filesize,length(theFiles));
for k = 1 : length(theFiles)
mrnaFilename = strtrim(theFiles(k).name);
fprintf(1, 'Now reading mrnaFile %d %s \n', k, mrnaFilename);
% read rna file
fullFileName = fullfile(myFolder, mrnaFilename);
rnafid = fopen(fullFileName);
if rnafid < 0
fprintf('====ERROR OPENING RNA FILE =====================');
end
rnaline = fgets(rnafid);
lc = 1; % line counter
while ischar(rnaline) && feof(rnafid) ~= 1
rnaline = fgets(rnafid);
rnaSplit = strsplit(rnaline);
% write to the matrix
rnaCounts(lc,k) = str2num(rnaSplit{2});
lc = lc + 1;
end
fclose(rnafid);
end
Run Code Online (Sandbox Code Playgroud)
经OP验证,str2numLinux版本的Matlab 2015b中的函数存在内存泄漏。无论如何,该函数并不是很有用,因为它旨在解析表示整个矩阵 ( 1 2; 3 4) 的字符串,而不是解析单个数字 ( 1.234) 的典型用例。str2double在进行简单的数字解析时使用;str2num即使没有损坏,它也会更快。
使用不同版本的 Matlab 也可能解决该问题,因为根据我的经验,这些类型的内存错误通常不会从一个版本持续到下一个版本。
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |