0
我有一個列向量A.MATLAB:我如何重新排列這個向量?
我要重新排序甲進入一個新的列向量B,應安排如下,取各第12元素:
[元件1,13,25,。 ..然後2,14,26,...,3,15,27,等]
我可以用下面的代碼開始
B = A(1:12:length(A))
我可以繼續這樣做,並追加到B.但是,我懷疑有一個更好的方法來做到這一點,而不重複t代碼十二次。
我有一個列向量A.MATLAB:我如何重新排列這個向量?
我要重新排序甲進入一個新的列向量B,應安排如下,取各第12元素:
[元件1,13,25,。 ..然後2,14,26,...,3,15,27,等]
我可以用下面的代碼開始
B = A(1:12:length(A))
我可以繼續這樣做,並追加到B.但是,我懷疑有一個更好的方法來做到這一點,而不重複t代碼十二次。
擴大戴維斯評論(這給出了一個很好的建議,但有點模糊的)。您可以使用重塑來創建矩陣,其中行具有您想要的形狀[1,13,15, ...; 2,14,26, ...; ...]
。然後,您可以轉置矩陣並重新使用重新整形。該示例的規模稍小一些,長度爲24,排列較短的矢量[1,9,17,2,10,18, ...]
(步驟8)。
a = 1:24
q = reshape(a,8,3)
r = q.'
b = reshape(r,1,24)
請注意,如果元素的數量不在M * N,則可能需要填充零。
下面你也會告訴你,Matlab的工作縱列,這可能是你將在這裏學到的最重要的事情的例子。使用這些知識,你將能夠在將來編寫更有效的Matlab代碼。
使用'reshape':http://www.mathworks.com/help/matlab/ref/reshape.html – David
你可以使用兩個嵌套的'爲loop'獲得來自呼叫的數量固定的答案。 'A = 1:1:144; B =零(大小(A));對於ii = 1,大小(A,2)/ 12;對於kk = 1:12,爲 ; (ii +(kk-1)* 12)= A(kk +(ii-1)* 12); 結束; end;' – SimoJoe
@SimoJoe當然循環更新,但是您的解決方案可以通過向量化來減少循環次數。 – patrik