[英]load specific column of a matrix from a .mat file v7.3 containing multiple matrices using for loop
我在Matlab上還很陌生,如果您能幫助我解決以下問題,我將不勝感激。
我有一個.mat文件v7.3,其中26個矩陣的數量增加,即Mw1,Mw2,Mw3 ..... Mw26
我只想分別加載每個矩陣的第一列以進行一些計算,然后使用for循環轉到下一個列。
我知道有使用matfile的選項,然后加載我想要的列,即:
firstColB = example.B(:,1); (matlab documentation)
但我不知道如何循環執行...
例如:
首先,我有一個.mat文件,其中包含26個5000x4矩陣。
然后我只想加載矩陣n (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,因為這些新矩陣對應於第二個矩陣等等
我希望它能說明我要做什么!
首先, 不要使用eval
。 另一個要避免的是變量名,例如A1 A2 A3
,這樣的mat文件首先不應創建,而應包含保存數據的單元格數組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
對於墊子中的每個變量,此代碼將使用forst列並將其存儲在單元格數組B中。
這是從磁盤訪問數據的另一種方法
使用matfile
函數創建一個matfile對象,然后對該對象使用動態字段名稱
myFile = matfile('myFileName.mat')
for jj = 1:26
B{jj} = myFile.( sprintf('Mw%i',jj) )(:,1)
end
我為什么要在這里發布
fieldnames
名稱會根據您的情況給出錯誤的名稱...(Mw10將出現在Mw2之前) Matfile
允許您僅加載必需變量的必需部分
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.