如何在更大的单元阵列中选择每个单元阵列的第二个元素?

时间:2013-10-02 12:22:26

标签: matlab cell-array

输入

hhh={{1,11},{2,22},{3,33},{4,44}}

预期输出

11 22 33 44

P.S。 hhh{1}{2}hhh{2}{2}hhh{3}{2}hhh{4}{2}会返回正确的输出,但我正在尝试查找如何执行hhh{:}{2}

3 个答案:

答案 0 :(得分:9)

一种方法是使用cellfun

n=2
cellfun(@(x)(x{n}), hhh)

这实际上只是for循环的简写。

或者另一个可能是完全矢量化的但是更难以概括的是首先线性化然后选择每一个元素:

temp = [hhh{:}]
[temp{2:2:end}]

Octave允许这一行(不幸的是Matlab):

[hhh{:}](2:2:end)

答案 1 :(得分:2)

如果保证细胞长度相等,则可以使用

cell2mat(vertcat(hhh{:}))*[0;1]

乘法选择通过在单元格中堆叠数组而创建的矩阵的第二列。

修改

一般情况下你可以使用

n=2;
result = cell2mat(vertcat(hhh{:}))*sparse(n,1,1,size(hhh{1},2),1);

temp = cell2mat(vertcat(hhh{:}));
result = temp(:,2);

答案 2 :(得分:2)

如果你的阵列保证是方形和数字,你应该认真考虑使用矩阵。

例如:

hhh=[1, 11; 2, 22 ;3, 33; 4, 44]

现在提取第二列变得微不足道了:

hhh(:,2)

如果数据的长度不等(但在合理的变化范围内),使用矩阵甚至值得考虑,因为它可以更有效地存储并轻松处理。想想这个例子:

hhh=[1, 11, 111; 2, 22, 222 ;3, 33, NaN; 4, 44, 444]

现在它仍然像

一样简单
hhh(:,2)