如何在matlab中调用结果的任何一部分,如(e1,e5,e6,e9)或(从e1到e7)?然后我需要在matlab中将它们组合在一个数组中

时间:2014-06-21 08:59:17

标签: arrays matlab

如果我有很多不同尺寸的数组,它们的名称采用以下形式:e1,e2,e3,...,e10等。我如何调用结果的任何一部分,如(e1,e5,e6,e9)或(从e1到e7)?然后我需要将它们组合在一个数组中。为了您的信息,这些数组名称来自此代码:

{clc
clear
a=input('please, select your array :')
b=a(:)'
c=length(b)
for d=1:c
    if (d<c)
      eval(sprintf('e%d = nchoosek(b,%d)', d,d))
    end
end}

我需要的是,将(e1,e2,e3,e4)矩阵垂直组合起来意味着每个矩阵位于一个矩阵中的另一个矩阵下,而不是所有矩阵中的每个矩阵彼此之间。 注意: - 空单元格不包含由于矩阵的不同大小组合而产生的数字,然后,我想用零填充这些单元格

1 个答案:

答案 0 :(得分:4)

首先:使用eval创建变量名称是不好的做法。我建议您将代码更改为以下内容:

a = input('Please, select your array: ')
b = a(:).'
c = length(b)
for d =1:c
    if (d<c)
      e{d} = nchoosek(b, d);
    end
end

更新回答:

发表评论:

您可以使用padarray插入零,以便所有单元格具有相同的列数。 cellfun用于对每个单元格执行相同的操作。

 cellfun(@(m) padarray(m,[0 max(cellfun(@(n) size(n,2), e)) - size(m,2)],'post'), e,'UniformOutput',0)

  Columns 1 through 5
    [7x6 double]    [21x6 double]    [35x6 double]    [35x6 double]    [21x6 double]
  Column 6
    [7x6 double]

现在所有矩阵都有相同数量的列,您可以按照您想要的任何方式组合它们,例如使用cell2mat这样的。{/ p>

cell2mat(x([1 3 5])')

原始答案:

现在你说要垂直组合所有矩阵。您可以将cell2matcellfun组合在一起,这样做:

cell2mat(cellfun(@(n) n(:), e, 'UniformOutput',0)') 

如果你只想要1号和3号,你可以这样做:

cell2mat(cellfun(@(n) n(:), e([1 3]), 'UniformOutput',0)')

cellfun - 部分相当于:

k = 1;
for ii = [1 3]
   f{k} = e{ii}(:);
   k = k + 1;
end

cell2mat垂直连接单元格。

这与您想要垂直对齐以下两个向量的方法相同:

a = [1 3; 2 4];
b = [5 8 11; 6 9 12; 7 10 13];
c = [a(:); b(:)]   
c =
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13