加载和绘制csv文件

问题描述:

我是一个新的matlab用户,试图将我的145个.csv文件加载到matlab中。这些文件具有相似的名称,全部包含两列和3000行。我需要能够为每个文件分别处理第1列和第2列并绘制它们(第2列为1)。 到目前为止,我尝试以下(包含所有文件的文件夹):加载和绘制csv文件

clear ; 
direc = dir('*.csv');    
for i=1:length(direc)    
    x = csvread(direc(i).name,1);  
end 

我的X只有3000x2双重的,但我需要第三维...我不知道如何访问'直接'文件夹。我还试图定义每个文件的第1列和第2列额外:

time(i,:,:)=x(:,:,1) and 
signal(i,:,:)=x(:,:,2) 

并绘制它;但它仅返回一个数据集(1file)的绘图。

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

谢谢!

我不确定你的意思是“如何访问'direc'文件夹”(direc是一个结构数组,你已经按照预期通过direc(index).fieldname访问它),但我认为主要问题是在for循环中,每次迭代都会覆盖x的前一个内容,所以最后得到的是最后一个读取文件的内容。

如果所有的CSV文件具有完全相同的尺寸,你需要什么似乎是

x(:,:,i) = csvread(direc(i).name,1); 

然后,您可以通过squeeze(x(:,1,:))访问所有第一列 - 只有x(:,1,:)将返回尺寸3000x1x145的三维阵列(使用上面给出的数字),squeeze将产生更方便的3000x145矩阵。

如果不是所有的csv文件都有相同数量的行和列,则需要使用单元阵列,并且不能使用方便的索引(btw:signal(i,:,:)=x(:,:,2)真的可以在二维x上工作?) ,或者用零填充,这可能需要一个中间步骤来找出3D阵列应该到底有多大。

+0

嗨,并且非常感谢您的评论!似乎循环真的是问题。但是现在,如果我试图在没有循环的情况下执行它,它会给我错误信息“??? Error using ==> csvread 输入参数太多。”但是由于我没有真正定义任何东西,所以我想不出错误的代码......并且数据也不会太多。你有想法吗? – Susu 2011-05-27 06:25:18

+0

你还在使用csvread(direc(i).name,1);'带标量索引'i'吗?如果仅输入该函数的参数(例如,在上例中为'direc(i).name,1'),而没有'csvread',圆括号和分号,输出是什么? – 2011-05-27 07:12:05

+0

然后我得到files.csv的所有名称,所以一个145x1结构 – Susu 2011-05-27 07:32:00