funsl=@(is) fun(v(is:is+l-1));
cell2mat(arrayfun(funsl,1:length(v)-l+1,'UniformOutput',false))
ここで行ったのは、固定されたv
andl
および開始インデックス パラメーター ( is
) に対して、それぞれのスライスを取得してv
適用する無名関数を定義するfun
ことです。
次に、この関数は、 を介してarrayfun
、この開始インデックスのすべての有用な値に適用されます。現時点では私自身がはっきりと名前を付けることができない理由により、各アプリケーションはp x 1
ベクトルを返しますが、arrayfun
それを適切なマトリックスに配置することはできません。したがって、UniformOutput=false 設定とそのcell2mat
周りの呼び出しです。
編集: 1 行 5 列のベクトルを 4 行 1 列のベクトルに変換する関数でこれをテストするには、使用した
l=5;v=1:12; fun=@(x) cumsum(x(2:end))';
そしてこの結果を得ました:
ans =
2 3 4 5 6 7 8 9
5 7 9 11 13 15 17 19
9 12 15 18 21 24 27 30
14 18 22 26 30 34 38 42
の定義でfunsl
v
が固定されていることに注意してください。このアプローチを異なるものに適用するには、 (および、これを修正したくない場合は ) をパラメーターとしてv
受け取り、上記の 2 行を含み、結果を返す別の関数を作成できます。 2番目のものの。v
l