我是一名新的matlab用户,试图将我的145 .csv文件加载到matlab中。这些文件具有相似的名称,并且都包含两列和3000行。我需要能够为每个文件单独使用第1列和第2列并绘制它们(第2列为1)。 到目前为止,我尝试了以下(对于包含所有文件的文件夹):
clear ;
direc = dir('*.csv');
for i=1:length(direc)
x = csvread(direc(i).name,1);
end
我的x只有3000x2的双倍,但我需要第三个维度...而且我不知道如何访问'direc'文件夹。我还试图通过以下方式定义每个文件的第1列和第2列:
time(i,:,:)=x(:,:,1) and
signal(i,:,:)=x(:,:,2)
并绘制它;但它仅返回1个数据集(1文件)的绘图。
有人可以帮我吗?我希望我提供了所有必要的信息。
谢谢!
答案 0 :(得分:2)
我不确定你的意思是“如何访问'direc'文件夹”(direc
是一个结构数组,你已经按照预期direc(index).fieldname
访问它了),但是我认为主要的问题是在for循环中,每次迭代都会覆盖x的前一个内容,所以最后得到的是上一个读取文件的内容。
如果所有csv文件的尺寸完全相同,那么您需要的是
x(:,:,i) = csvread(direc(i).name,1);
然后,您可以squeeze(x(:,1,:))
访问所有第一列 - 只有x(:,1,:)
将返回一个大小为3000x1x145的三维数组(使用您在上面提供的数字),squeeze
将生成一个更方便3000x145矩阵。
如果不是所有的csv文件都有相同数量的行和列,则需要使用单元格数组,并且不能使用方便的索引(顺便说一下:signal(i,:,:)=x(:,:,2)
确实在二维上工作x?),或用零填充,这可能需要一个中间步骤来找到最终3D阵列的大小。