访问单元阵列中数组的简单方法

时间:2016-09-10 23:17:28

标签: arrays matlab vector indexing cell-array

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

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};

假设我只想在新的单元格数组中使用第1,第2和第4矩阵(即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

我想知道是否有更快捷/更简单的方式。也许有一个我不知道的重要索引技巧或功能?我很感激帮助。

2 个答案:

答案 0 :(得分:3)

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

因此你可以做到

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'

答案 1 :(得分:1)

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

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