2017-01-12 145 views
1

如果你有幫助,我會幫助你。我是編程初學者。我正在使用Matlab。所以,我有一個431x1類型的數組 - 雙倍;我有數字1到6;例如:1 4 5 3 2 6 6 3 3 5 4 1 ...;我想要做的是我需要創造一個新陣列,我會讓每個元素重複11次;例如:a(1:11)= 1;一(12時22分)= 4;一(23時33分)= 5;或以不同的方式說明:a = [1 1 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 

你也可以看看功能升ike repmat在MATLAB的幫助下複製數組。

+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次而不是每個元素重複11次;無論如何非常感謝! –

相關問題