加载和绘制csv文件

时间:2011-05-26 11:59:20

标签: matlab csv matlab-load

我是一名新的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文件)的绘图。

有人可以帮我吗?我希望我提供了所有必要的信息。

谢谢!

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阵列的大小。