2011-09-10 109 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