我有一个 csv 文件,其中包含 4 列的二维数组,但行数不同。例如:
2, 354, 23, 101
3, 1023, 43, 454
1, 5463, 45, 7657
4, 543, 543, 654
3, 56, 7654, 344
...
我需要能够导入数据,以便我可以对每个数据块运行操作,但是csvread、dlmread和textscan都忽略空行。
我似乎无法在任何地方找到解决方案,这怎么办?
PS:
可能值得注意的是,上述格式的文件实际上是许多文件的串联,只包含一个数据块(我不想每次都从数千个文件中读取)因此块之间的空行可以是更改为任何其他分隔符/标记。这只是使用 python 脚本完成的。
编辑:我的解决方案 - 基于/受以下 petrichor 启发
我用速度更快的textscan替换了csvread。然后我意识到,如果我用 nan 行替换空白行(修改我的 python 脚本),我可以消除对第二个文本扫描慢点的需要。我的代码是:
filename = 'data.csv';
fid = fopen(filename);
allData = cell2mat(textscan(fid,'%f %f %f %f','delimiter',','));
fclose(fid);
nanLines = find(isnan(allData(:,1)))';
iEnd = (nanLines - (1:length(nanLines)));
iStart = [1 (nanLines(1:end-1) - (0:length(nanLines)-2))];
nRows = iEnd - iStart + 1;
allData(nanLines,:)=[];
data = mat2cell(allData, nRows);
计算时间为 0.28 秒(一个只有 103000 行的文件)。我已经接受了 petrichor 的解决方案,因为它确实最好地解决了我最初的问题。