2011-09-10 114 views
0

我有一個問題,我正在做一個matlab函數,它應該給出未知數量的矩陣。問題是我不知道如何儲存它們,我需要像[A,B,C]這樣的結構,其中每個入口可以是不同的矩陣,具有不同的大小。如何在matlab中保存未知數量的矩陣?

如何做到這一點?

回答

1

您需要一個cell array。考慮到這一點:

A = {[1,2,3;4,5,6],rand(20,'single'), 'hello world'} 

A = 

[2x3 double] [20x20 single] 'hello world' 

A是一個細胞容器,持有不同類型的數據和不同的矩陣大小。到索引特定的「細胞」,使用括號像這樣:

A(1:2) 
ans = 

[2x3 double] [20x20 single] 

索引用括號將總是返回相同的數據類型,所述陣列中的任何陣列。所以在這裏你得到兩個單元陣列。要訪問單元格的內容,請使用大括號而不是括號。例如,

A{1} 
ans = 

1  2  3 
4  5  6 

要在細胞內部索引,使用圓括號,象這樣沿着大括號:

A{1}(2,1:2) 
ans = 

4  5 

你可以閱讀更多關於電池陣列,它們的用途和索引在Mathworks blog

3

考慮下面的函數,它返回不同的數字輸出取決於輸入參數:

function varargout = myFunc(num) 
    for i=1:num 
     varargout{i} = rand(i+2,i); 
    end 
end 

我們稱這樣的功能,並接收其所有的輸出,請嘗試以下操作:

num = 5; 
X = cell(num,1); 
[X{1:num}] = myFunc(num);  %# [A,B,C,D,E] = myFunc(5) 

結果爲:

>> X 
X = 
    [3x1 double] 
    [4x2 double] 
    [5x3 double] 
    [6x4 double] 
    [7x5 double] 

單個矩陣可以被訪問h細胞陣列符號:

>> X{5} 
ans = 
     0.75493  0.68342  0.19705  0.80851  0.67126 
     0.24279  0.70405  0.82172  0.75508  0.43864 
     0.4424  0.44231  0.42992  0.3774  0.8335 
     0.6878  0.019578  0.88777  0.21602  0.76885 
     0.35923  0.33086  0.39118  0.79041  0.16725 
     0.73634  0.42431  0.76911  0.9493  0.86198 
     0.39471  0.27027  0.39679  0.32757  0.98987