MATLABベクトル化の方法とは?

このQ&Aのポイント
  • MATLABのforループの実行時間が長すぎて改善したい場合、ベクトル化を検討することがあります。
  • ベクトル化とは、配列や行列演算を使って処理を一度にまとめる方法です。
  • ベクトル化により、コードの実行時間を劇的に短縮することができます。
回答を見る
  • ベストアンサー

MATLAB ベクトル化(functionの繰り返

MATLAB Lのプログラムを組んでいます。 for loop では実行時間が長すぎるため、改善したいです。そこでベクトル化を思いつきましたが、「functionの実行を繰り返す」場合の書き方がいまいち分からないので、教えていただきたいです。 元のループ処理は以下の通りです。 for n= 1:length(MeasuredData) SimulatedDataSet(n) = func1(param1(n), param2(n), param3(n)); end 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8014/17130)
回答No.1

こんな感じ? SimulatedDataSet = arrayfun(func1,param1,param2,param3)

関連するQ&A

  • Matlabについて質問です

    Matlabについて質問です。 長さがdataの数のデータがあり次のように分類したいのですが、データの中の-0.0074などが1になってくれません。 どこに原因があると思われますか?よろしくお願いします! recd=zeros(length(data),1); for n=1:length(data) if data(n)<-0.01; recd(n) = 0; elseif(-0.01<=data(n)<0); recd(n) = 1; elseif(0<=data(n)<0.01); recd(n) = 2; else recd(n) = 3; end end よろしくお願いします!!

  • matlabのfor文について

    matlabについて基本的な質問があります. たとえば a1 = 11 a2 = 32 a3 = 53 a4 = 63 for i = 1:length(a1) ○○○ end for i = 1:length(a2)  ○○○ end for i = 1:length(a3)  ○○○ end for i = 1:length(a4)  ○○○ end の時に,for文を一つにまとめるにはどうすればいいですか?

  • MATLAB 複数のmkdirを実行したい

    MATLAB 複数のmkdirを実行したい いつもお世話になります。 matlabにて pass={pass1,pass2,pass3} %pass1~3は文字列が格納されてます。 passnum=1:length(pass) mkdir(pass{passnum}) を実行しようと思ったんですが、引数が多すぎて無理でした。 forループなどを使えば実行出来るんですが、どうにかしてこのような簡易的な書き方で実行出来ないものなんでしょうか? お手数ですがご回答よろしくお願いします。

  • MATLABのアップグレード問題

    MATLAB初心者です。 MATLAB6.1(おそらく)で開発されたコードがMATLAB7.01で動きません。 アドバイスを頂ければと思います。 1: out = {}; 2: for i=1:length(files), 3: out = [out, helper([d '/' files{i}], pat(2:end))]; 4: end 上記のコードの3行目で「Conversion to cell from char is not possible.」エラーが発生します。 MATLAB6.1から6.5のアップグレード問題で、空のセル配列の連結が原因のようです。 そこで下記のように修正しました。 1: out = {}; 2: for i=1:length(files), 3: if i==1 out = helper([d '/' files{i}], pat(2:end)); 4: else out = [out, helper([d '/' files{i}], pat(2:end))]; 5: end 6: end 1回目のループの場合は連結せず、2回目以降は連結するように修正しています。 このように修正しても意図通り動いていません。 修正方法は間違っていますか。

  • matlabで2変数出力の関数が出力1つ

    matlab6.5を使用。以下はMathworks社のWebから貼り付けたサンプルです。親functionの下に平均と中央値を計算するサブfunctionがある簡単なスクリプトです。本来なら、例えば引数にA=[1,2]を入れこのM-fileを実行すると、出力には avg = 1.5 med = 1.5 と出てくるのではないでしょうか。ところが、私のmaltabでは ans = 1.5 と1つだけとなります。 正常なのでしょうか。エラーの場合、何が考えられるかご指摘お願いします。 function [avg, med] = newstats(u) % Primary function % NEWSTATS Find mean and median with internal functions. n = length(u); avg = mean(u, n); med = median(u, n); function a = mean(v, n) % Subfunction % Calculate average. a = sum(v)/n; function m = median(v, n) % Subfunction % Calculate median. w = sort(v); if rem(n, 2) == 1 m = w((n+1) / 2); else m = (w(n/2) + w(n/2+1)) / 2; end

  • For文の終了値を関数にしても問題ないですか

    VB6です。 For文の終了値が関数になっている場合、この関数の評価はFor文を実行する最初に1回しか行われない(関数は1度しか呼ばれない)ということがVBの規約か何かどこかで明記されているでしょうか。 例) For i = 0 To Func(i) (処理) Next Function Func(i as integer) as integer Func = i + 1 End Function という風に記述した場合、(処理)が2回実行されるてループを抜けることが確認できました。これはi=0のときに関数Funcを一回だけ実行しているということです。(デバッグモードでそれを確認) これは、規定の動作なのかそれともたまたまなのでしょうか。 上記のFor文でもし毎回Funcが評価されると無限ループになってしまいます。

  • MATLABの計算過程での質問です。

    はじめまして。 MATLABのコードでどうしてもわからないことがあり質問させていただきます。 問題はerrorの計算で起こります。 error=Σ[((F_n+1)-(F_n))/(F_n+1)] ループ内の計算がiter=1以降に進まなくなりました。 いろいろ編集してみましたが、どうしてもerrorのところがうまく働きません。 良かったらアドバイスよろしくお願いします。 tol=tolerance N=number of maximum iterationです ---------------------------------------------------------------- tol=0.01; N=100; A=zeros(26,26); f0=zeros(26,26); A(11:26,1)=100; A(26,1:16)=100; f=A; iter=1;f0=0 n=1; for n=1:N for i=2:26-1 for j=2:26-1 f(i,j)=(1/4)*(A(i+1,j)+A(i-1,j)+A(i,j+1)+A(i,j-1)) error(i,j)= sum(abs((f(i,j)-f0(i,j))./f(i,j))); end end if error <=tol break; else A=f; f0=f; iter=iter+1 end end

  • matlab制御文での値の格納?

    現在matlabを使用してfor文で1から3000まで繰り返し、sigmaを求めるというプログラムを作っているのですが、うまくいきません。これだとn=3000のsigmaの値しかでてきません。sigmaにfor文で繰り返し求めたすべての値を格納したいです。初心者で低レベルな質問ですみません。どなたか教えていただけませんか。 sigma=0; for n=1:3000, if n <=300 dsig=1; elseif n <= 950 dsig=-1; elseif n <= 1700 dsig=1; elseif n <= 2550 dsig=-1; elseif n <= 3000 dsig=1; end sigma =sigma + dsig; end

  • PL/SQLカーソルの2重FORループができません

    こんにちは。 PL/SQLで下記のようなFORループを 2重3重に処理することはできないのでしょうか? コンパイル時に PLS-00103: 記号"END"が見つかりました と、内ループの"END"に対して起こられてしまいます。 お分かりになる方、よろしくお願いします。 … <<L_OUT>> FOR data_a IN csr_a LOOP  … <<L_IN>> FOR data_b IN csr_b LOOP  END LOOP L_IN;  … END LOOP L_OUT; …

  • 反射光ベクトルが理解できません

    反射光ベクトルの計算式 R=2(L・N)N-L ですが、 (Lは入射光ベクトル、Nは法線単位ベクトル) なぜ入射光ベクトルは物体の表面から光源へ向いているのでしょうか? 光源から物体へ向くのが正しいのではないですか? また、なぜ法線ベクトルを内積倍した後に2倍しているのでしょうか? よろしくおねがいします