簡體   English   中英

使用for循環從包含多個矩陣的.mat文件v7.3加載矩陣的特定列

[英]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中。

丹尼爾(Daniel)的答案涵蓋了一些重要信息。在此答案之前,應考慮...

這是從磁盤訪問數據的另一種方法

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM