2011-05-26 91 views
0

我是一個新的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)的繪圖。

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

謝謝!

回答

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文件都有相同數量的行和列,則需要使用單元陣列,並且不能使用方便的索引(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