4

入力

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

意図した出力

11 22 33 44

Ps hhh{1}{2}hhh{2}{2}hhh{3}{2}およびhhh{4}{2}は正しい出力を返しますが、 のようにする方法を見つけようとしていますhhh{:}{2}

4

3 に答える 3

9

1つの方法は、使用することですcellfun

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

これは基本的に for ループの略です。

または、完全にベクトル化されている可能性がありますが、一般化がより困難になる別の方法は、最初に線形化してから、2 つおきの要素を選択することです。

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

Octave ではこれを 1 行で行うことができます (Matlab では残念ながらそうではありません)。

[hhh{:}](2:2:end)
于 2013-10-02T12:25:00.057 に答える
2

セルの長さが等しいことが保証されている場合は、使用できます

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

乗算では、配列をセルに積み重ねて作成された行列の 2 番目の列が選択されます。

編集:

一般的なケースでは、使用できます

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

また

temp = cell2mat(vertcat(hhh{:}));
result = temp(:,2);
于 2013-10-02T13:02:29.110 に答える
2

配列が正方形で数値であることが保証されている場合は、代わりに行列を使用することを真剣に検討する必要があります。

例えば:

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

これで、2 番目の列の抽出は簡単になりました。

hhh(:,2)

行列を使用することは、データがすべて同じ長さではない (ただし、妥当な範囲内である) かどうかを検討する価値があります。これは、単純に、より効率的に格納され、非常に簡単に処理できるためです。次の例について考えてみてください。

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

今でも同じくらい簡単です

hhh(:,2)
于 2013-10-07T12:18:54.993 に答える