2017-01-12 13 views
1

あなたが手助けしてくれれば多分安らかです。私はプログラミングの初心者です。私はMatlabを使用しています。だから、私は431x1型の配列を持っています - ダブル;そこに私は1から6の数字を持っています。例:1 4 5 3 2 6 6 3 3 5 4 1 ...;私がやりたいことは、各要素が11回繰り返される新しい配列を作る必要があるということです。例:a(1:11)= 1; a(12:22)= 4; a(23:33)= 5;または異なって説明することができる。a = [1 1 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 ...]; 私はループでそれをやろうとしましたが、いくつか問題がありました。どのような機能を利用できるか知っていますか?MATLABはあるアレイから別のアレイへのデータの繰り返しを作成します

+0

[repelem](https://www.mathworks.com/help/matlab/ref/repelem.html) – rahnema1

答えて

0

まず第一に、あなたのコードを読んで、あなたの疑問を簡単にするために別々のブロックでフォーマットすることができれば、それが役立つだろう...


のは、あなたのように、長さNx1の配列を持っていたとしましょう:

x = [1 2 3 4 5 ...]'; 

あなたがループを構築して連結することができます:あなたはまた、関数リットルで見ることができる

for i = 1 : length(x) 

for i = 1: length(x) 
    y(1 + (i - 1) * 11 : 1 + i * 11) = x(i); % Copy to a moving block 
end 
y(end) = []; % Delete the superfluous one at the end 

配列を複製するためのMATLABヘルプのike repmat

+0

ありがとうございます!私はループ内でrepmatを試しましたが、再度、複製された値を格納するための正しい索引付けに問題がありました。 –

0

NRepは、あなたがそれを繰り返したい回数である)、これを試してみてください:

x = [1, 2, 3, 4, 5]; 
NRep = 5; 
y = reshape(repmat(x,[NRep,1]),[1,length(x)*NRep]) 

それはそれを書き出すために少し面倒なので、私はまた、特に、これは「ハック」を使用することを楽しむ:

x = [1, 2, 3, 4, 5]; 
NRep = 5; 
y = kron(x, ones(1,NRep)); 

希望に役立ちます!

P.S .:これは、行ベクトル専用に設計されています。列ベクトルが必要な場合は、変更するのは簡単ですが。

編集:もちろん、あなたがポスト-R2015aの場合、y=repelem(x,NRep)を使用することができます。私は古いMatlabsで作業するので、私はそれらを忘れる傾向があります(時にはそれは少し下位互換性があるという悪い考えではありません)。私に思い出させるために@ rahnema1に感謝します。

+0

ありがとう!これは、私が必要としていた正確なものであることを知っていなかったリピート機能です。D yayy、あなたのコードも正常に動作しましたが、問題は、各要素を11回複製するのではなく、とにかくおかげさまで! –

関連する問題