2015-12-17 30 views
1

我在Matlab中很新,如果能幫助我解決以下問題,我將不勝感激。從包含多個矩陣的.mat文件v7.3中加載矩陣的特定列使用for循環

我有具有26點矩陣與越來越多的一個.MAT文件7.3版即MW1,MW2,MW3 ..... Mw26

我想從每個矩陣只裝入第一列分別做一些計算,然後使用for循環轉到下一個計算。

我知道有使用matfile的選項,然後加載,我想也就是列:

firstColB = example.B(:,1); (matlab documentation) 

,但我不知道該怎麼做,在一個循環...

例如:

首先,我有一個帶有26個矩陣5000x4的.mat文件。

然後我想只加載矩陣的第一列Ñ(N = 26)

然後執行下列

ao=0; 
a=[2,4,6,8,10,12,14,16,18,20]; %segments of the tube in cm 

for j=1:10; 

temp11=find(firstColumn>ao & firstColumn<=a(j)); %firstColumn of the *n*matrix 

temp1=firstColumn(temp11,:); 

eval(sprintf('A%d = temp1', j)); 

ao=a(j); 

end 

我的問題:

此循環將生成10個新的矩陣A1,A2,A3 ...... A10,但不指示對應於第一個矩陣(即Mw1)。它應該像A11,A12,A13 ... A110。

...當我完成這個循環時,我想自動轉到下一個矩陣,然後重複相同的操作,但是A矩陣應該像A21,A22,A23 .... A210,因爲這些新的矩陣對應到第二個矩陣等

我希望它使我想要做的事!

回答

1

首先,do not use eval. Anoter的事情,以避免像A1 A2 A3,這樣的墊文件不應該被擺在首位創建的變量名,而不是它應該包含一個單元陣列A保存數據。

我沒有得到您的完整問題,但我會爲您提供一些代碼,希望對您有所幫助。如果您不知道單元格數組和動態字段名稱,請閱讀相應文檔以瞭解代碼。

首先,我推薦使用load總是帶有輸出參數。這導致從墊子上,而不是單個變量包含所有數據的結構:

data=load('test.mat') 

現在你可以遍歷它:

fn=fieldnames(data) 
B=cell(1,numel(fn)) 
for ix=1:numel(fn) 
    B{1}=data.(fn{ix})(:,1) 
end 

對於來自你的褥子每個變量,這個代碼利用福斯特列,將其存儲在單元陣列B中。

+0

喜丹尼爾所需的零部件,謝謝vewry多爲你的答案。請允許我多解釋一點:我在開始時已經有26個.txt數據文件,它們的大小不一樣(所以我錯誤地提到所有矩陣都是5000x4 ...列數總是相同的但不同大小的行)...然後我做一些計算,我的最終矩陣是M = [taa,xaa,yaa,zaa]; eval(sprintf('Mw%d = M',i)); ('E:\ PEPT \ PEPT數據文件爲Matlab \ water \ rename_water \ Mwppdata.mat','Mw *','-v7.3');那麼,我如何分別在第二個循環中引入每個矩陣的每一列? –

1

Daniel的答案涵蓋了一些重要信息在回答此問題之前應該考慮......

這是從磁盤

使用matfile函數創建一個matfile對象與此對象

myFile = matfile('myFileName.mat') 
for jj = 1:26 

    B{jj} = myFile.(sprintf('Mw%i',jj))(:,1) 

end 

爲什麼我在這裏發表這個訪問數據,然後使用動態字段名的替代方法

  • 我相信fieldnames會給順序錯誤的名字你的情況......(MW10將MW2之前出現)
  • Matfile允許你只加載只在必需的變量