プロが教える店舗&オフィスのセキュリティ対策術

MATLABでよくやる以下のプログラミング方法を効率よくCでプログラムするにはどうすべきですか?

a=[];
for i = 1:100
a_k = [1 2 3 4];<<-a_kは1行4列の行列です
a = [a a_k];<<-特にこの部分
end

よろしくお願いします。

A 回答 (3件)

リスト構造にすればよいのでは?

    • good
    • 0

これは、MATLABでもよくないプログラムです。


MATLABのエディタのコードアドバイザみたいなのが、
「ループ内で変数aが増加する可能性があります。メモリの事前割り当てを検討して下さい」
というような警告を発しているでしょう?
実行パフォーマンスも最悪のはずです。
したがって、MATLABでもCでも、
「ループ回数から使用するメモリ量を事前に算出し、
 メモリの事前割り当てを行ってからプログラミングをする」
ことが、最も効率が良いプログラムです。

MATLABなら、
N = length(a_k);
a = zeros(N*100);
for i=1:100
a(k:k+N-1) = a_k;
end
とか。まあ、この程度ならrepmatの1文で作ってしまえますが。
Cも同様。メモリを確保して、for文でindex計算をして代入する。
    • good
    • 0

#2ぼけぼけ。


for i=1:100
 s = 1 + N*(i-1);
 e = s + N-1;
 a(s:e) = a_k;
end
こんな感じかな。

あ、MATLABでiは確か虚数を表すから使わないほうが良かった気もする。
うろ覚え。
    • good
    • 0
この回答へのお礼

なるほど、ありがとうございます。
MATLABでもCでも試してみます。

お礼日時:2010/01/24 18:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!