プロが教えるわが家の防犯対策術!

初心者でよく分かりません。
64×24の行列で2列ごとに同じ列を挿入したいのですが方法が分かりません。

イメージ的には下図のような感じです。●(列)を挿入するにはどのようにすればよいでしょうか?●は全て同じ値です。出来るだけ具体的に教えていただけるとありがたいです。

●○○●○○●○・・・
●○○●○○●○・・・  
●○○●○○●○・・・
・・・・・・・・・・・
・・・・・・・・・・・

A 回答 (3件)

おそらく最もシンプルな方法を紹介します。


64×24の行列Aに64×1の列ベクトルvを挿入して、64×36の行列Bを作るとします。

B=zeros(64,36); % 作成する行列を初期化
for n=1:36
if mod(n,3)==1 % nを3で割った余りが1のとき(n=1,4,7,…)
B(:,n)=v; % Bのn列目をvにする
elseif mod(n,3)==2 % nを3で割った余りが2のとき(n=2,5,8,…)
B(:,n)=A(:,(2*n-1)/3); % Bのn列目をAの1,3,5,…列目にする
else % それ以外(n=3,6,9,…)
B(:,n)=A(:,n*2/3); % Bのn列目をAの2,4,6,…列目にする
end
end

もう少し簡潔にしたいなら
B=zeros(64,36);
B(:,1:3:end)=repmat(v,1,12); % repmat(v,1,12):vを横に12個並べた行列
B(:,sort([2:3:end 3:3:end]))=A;
とかでしょうか。
    • good
    • 0
この回答へのお礼

ここまで丁寧に教えて頂けたので、非常に助かりました。この方法は、通信シミュレーションでパイロットシンボルを挿入するのに必要でした。それもなんとか出来ました。本当にありがとうございました。

お礼日時:2009/10/18 12:52

#2です


間違ってました。
s = size(mat_org); %mat_org 元の行列
mat_ins = ones(s(1),1) * v; %v 挿入したい値
mat_new(s(1),1)=[];
for I=1:2:s(2);
mat_new = [mat_new mat_ins mat_org(1:end,I*2+1:(I+1)*2)];
end

とかでどうでしょう?
これも確認してませんエラーがあるかも・・・。
    • good
    • 0

s = size(mat_org); %mat_org 元の行列


mat_ins = ones(s(1),1) * v; %v 挿入したい値
for I=1:2:s(2);
mat_new = cat(2,mat_ins,mat_org(1:end,I*2+1:(I+1)*2));
end

とかでどうでしょう?
確認してないのでエラーがあるかも・・・。
    • good
    • 0

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