私は現在、自分のコードを高速化する必要があるため、ループの代わりにベクトル化を使用したいと考えています。次のコードは、私の計算中に多くのことを呼び出されるコードの(非常に)単純化したバージョンです:私はベクトル化を使用しようとしましたが、残念ながら私の唯一の最初のエントリとして動作するようには思えないベクトル化とベクトルインデックス
T=10; n=5; w0 = 25000; w1 = 23000; b0 = 15000;
vec = zeros(1,T+2*n+1); vec(1:n+1) = w0; vec(n+2:n+T+1) = b0; vec(n+T+2:T+2*n+2) = w1;
ref0=zeros(1,n);
for i = 1:n
ref0(i) = sum(vec(T+i+2:n+T+i+2));
end
i = 1:n;
ref1 = sum(vec(T+i+2:n+T+i+2));
出力は以下の通りである:私は、ベクトルのインデックス作成プロセスの入力として使用されるベクトル
ref0 =
106000 114000 122000 130000 138000
ref1 =
106000
はREF1が同じ出力を与えることを達成する方法はありますベクトル化を使ってref0?それは非常に明白かもしれませんが、私はここでさらに得意ではありません。私はどんな助けにも感謝しています!ありがとうございます。
これは、コロン演算子 ':'はベクトルを入力として受け入れず、代わりにベクトル入力の最初の要素のみを使用します – Suever
Vecotrizationは必ずしも高速であるとは限りません。あなたのコードをプロファイルしましたか? –
'vec'は' T + 2 * n + 1'列に初期化され、 '2 * n + T + 2'列には値が割り当てられます...ベクトル化の問題ではなく、 – Wolfie