300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > matlab如何读取二维数组 Matlab从csv文件中读取多个二维数组

matlab如何读取二维数组 Matlab从csv文件中读取多个二维数组

时间:2018-10-10 19:28:55

相关推荐

matlab如何读取二维数组 Matlab从csv文件中读取多个二维数组

我有一个csv文件,它包含2列4列数组,但行数不等。例如:Matlab从csv文件中读取多个二维数组

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下面

我更换了csvread与textscan这是更快。然后我意识到,如果我用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.28s(一个只有103000行文件)计算。我已经接受了petrichor的解决方案,因为它最能解决我最初的问题。

+0

我想一个办法是更换空行用类似的NaN,NaN的不同,NaN,NaN的,然后使用csvread加载数据后,或者类似的东西,你可以循环访问数据,并且很容易地在matlab中提取块。 –

+0

我希望避免在导入之后通过数据循环(我假设),这只会为整个过程增加更多时间。另一方面,我发现迄今为止,textscan是最快的导入方式? –

+0

如何不留下任何分隔线,而是创建第二个文件,该文件只是新块开始时的行索引,然后使用此文件来定义要处理的行范围,而不是为每个块创建单独的矩阵? –

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。