gpt4 book ai didi

matlab - Matlab,从csv文件读取多个2d数组

转载 作者:行者123 更新时间:2023-12-01 15:07:15 25 4
gpt4 key购买 nike

我有一个csv文件,其中包含4列的2d数组,但行数却有所不同。例如:

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.28s(一个只有103000行的文件)。我接受了petrichor的解决方案,因为它确实可以最好地解决我的最初问题。

最佳答案

filename = 'data.txt';

%# Read all the data
allData = csvread(filename);

%# Compute the empty line indices
fid = fopen(filename);
lines = textscan(fid, '%s', 'Delimiter', '\n');
fclose(fid);
blankLines = find(cellfun('isempty', lines{1}))';

%# Find the indices to separate data into cells from the whole matrix
iEnd = [blankLines - (1:length(blankLines)) size(allData,1)];
iStart = [1 (blankLines - (0:length(blankLines)-1))];
nRows = iEnd - iStart + 1;

%# Put the data into cells
data = mat2cell(allData, nRows)

这为您的数据提供了以下内容:
data = 

[3x4 double]
[2x4 double]

关于matlab - Matlab,从csv文件读取多个2d数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com