0

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

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

谢谢!

4

1 回答 1

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 阵列最终应该有多大。

于 2011-05-26T13:48:57.387 回答