【问题标题】:Simple way of accessing arrays in cell arrays访问元胞数组中的数组的简单方法
【发布时间】:2017-01-18 18:37:35
【问题描述】:

我正在寻找一种快速、简单的方法来访问元胞数组中的特定数组。例如,假设我有

A = rand(10,2);
B = rand(15,1);
C = rand(130,1);
D = rand(16,1);
E = rand(1000,25);
my_cell = {A,B,C,D,E};

假设我只想要新元胞数组中的第一个、第二个和第四个矩阵(即 A、B 和 D)。所以新的元胞数组将由 {A, B, D} 组成。这显然很容易使用 for 循环:

idx=[1,2,4];
new_cell=cell(1,length(idx));
for i=1:length(idx)
   new_cell{i}=my_cell{idx(i)};
end

我想知道是否有更快/更简单的方法。也许有一个明显的索引技巧或我不知道的功能?非常感谢您的帮助。

【问题讨论】:

    标签: arrays matlab vector indexing cell-array


    【解决方案1】:

    是的,您可以像普通数组一样索引元胞数组(即使用括号而不是方括号)。实际上,它一个“普通”数组:它是一个普通的“单元”元素数组。因此,像普通数组一样索引它们只会返回单个“单元格元素”而不是它们的 内容

    所以你可以这样做

    my_cell(idx)
    


    编辑:只是为了明确区分“像数组一样索引单元格”和“将逗号分隔的输出收集到新的单元格数组中”方法:
    >> my_cell = {'A','B','C'; 'D','E','F'; 'G', 'H', 'I'}    
    my_cell = 
        'A'    'B'    'C'
        'D'    'E'    'F'
        'G'    'H'    'I'
    
    >> my_cell(1:2,1:2)
    ans = 
        'A'    'B'
        'D'    'E'
    
    >> {my_cell{1:2,1:2}}  % this will ALWAYS be a horizontal cell vector
    ans = 
        'A'    'D'    'B'    'E'
    

    【讨论】:

    • 没有比这更简单的了 :) 谢谢
    【解决方案2】:

    {my_cell{idx}} 应该可以解决问题。

    my_cell{idx} 将 my_cell 中由 idx 索引的元素返回为 逗号分隔列表。它相当于A, B, D。您需要做的就是用{} 关闭此列表,以从中创建一个元胞数组。

    【讨论】:

    • 注意。如果您希望保留结构,这种方法将不起作用。将您的原始单元格更改为my_cell = {A;B;C;D;E},您就会明白我的意思了。
    • 太棒了!感谢您对结构的提醒。我明白你的意思了。
    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多