2017-03-20 5 views
0

私は2928の値を持つベクトルを8784の値を持つベクトルに変換しようとしています。最初のベクトルは3時間間隔の情報を持つベクトルで、3時間ごとに加算された値を持つ時間ベクトルを持ちたいと思います。残りはNaNで埋められるべきです。 私の最初のアプローチは、8784の値を持つNaNベクトルを作成することでしたが、私はこのために 'forループ'を作成できませんでした。それは、単純な、私は例を挙げて説明しようようにするにMatlab:2928x1のベクトルを特定の間隔の要素を持つ8784x1のベクトルにするにはどうすればよいですか?

(nは最小のベクトルの値の数である):

S_3h = ones(n,1); % this acts as the small vector that has only information each 3hours 
B_h = nan(3*n,1); %this is the created hourly vector that I want to fulfill 

結果が欲しかったです:

B_h = [1 nan nan 1 nan nan 1 nan nan 1 nan nan ...] 

私を助けてくれますか? ありがとうございます!この場合、1に異なるステップで

答えて

5

単にインデックスは、ステップ3.

B_h(1:3:end) = S_3h 
+0

ありがとうございます! – matrj

1

Zizy Archer's solutionは(そしておそらくあなたが使用すべきか)良いですが、下の別のオプションです。

S_3h = ones(n,1); 
B_h = nan(3,n); % notice the different indices 

B_h(1,:) = S_3h; % the top row contains the non-NaN values. This is common to all methods. 
B_h = B_h(:); % reshape to a column vector 

は少し異なっを完了:

B_h = reshape(S_3h.' .* [1; NaN(1,2)],[],1);    % R2016b onward 
B_h = reshape(bsxfun(@times, S_3h.',[1; NaN(2,1)]),[],1); % R2007a onward 

あなたは、画像処理ツールボックスを持っている場合は、あなたもそうようpadarray機能を使用することができます。

B_h = reshape(padarray(S_3h, [0 2], NaN, 'post').', [], 1); 
1

は2つの良い答えがすでにありますスポーツのためだけに(そしてkron ...)、ここに1つのライナーソリューションがあります:

S_3h = randi(10,1,n); 
B_h=kron(S_3h,[1 NaN NaN]); 
関連する問題