1. ホーム
  2. matlab

[解決済み] Matlabのリスト理解

2022-02-10 17:13:04

質問

次のようなことをワンライナーで書いてもいいのでしょうか?

x = [1,3,5,7,9]
res = zeros(1,size(x,2));
for i=1:size(x,2);
    res(i) = foo(x(i));
end;

foo関数が期待通りに配列を扱えないと仮定します。私の場合、fooは引数として配列を与えてもスカラーを返します。

例えばPythonでは、次のようになります。

x = [1,3,5,7,9]
res = [foo(y) for y in x]

解決方法は?

arrayfun は必要なものです。例えば

res = arrayfun(@foo, x)

以降 foo は常にスカラーを返すので、上記はうまくいき res と同じ次元のベクトルになります。 x . もし foo は可変長の出力を返します。 'UniformOutput' から false または 0 への呼び出しで arrayfun . このとき出力されるのは cell の配列になります。