2012-10-24 103 views
-1

假設x是數組[x1, x2, x3, x4, x5],我們想要合併x2x4。這是通過將它們的總和放在數組中並從數組中刪除x2x4來完成的。輸出數組應該如下所示:[x1, x2+x4, x3, x5]在Matlab中合併數組元素

這裏是在Matlab這樣做的一種方法:

tmp = x(2) + x(4); 
x(2) = tmp; 
x(4) = tmp; 
[m,n] = unique(x,'first'); 
x(sort(n)) 

此方法,只要在數組中沒有重複。是否有任何巧妙的Matlab方法可以在任何x上執行此操作,而無需在合併值之後使用循環和數組元素移位?

+0

一般來說,輸入是一個數組x和要合併的目標索引i,j。 – locke14

回答

1

如果你想這個

x = [x(1) x(2) x(3) ... x(i)... x(j)... x(n)] 

變成這個

x = [x(1) x(2) x(3) ... x(i)+x(j) ... **... x(n)] 

其中**是空的,新的X是N-1個元素長的,那麼你應該做的:

x(i) = x(i)+x(j); 
x(j) = []; 

沒有tmp,沒有排序也沒有唯一性。

+0

是的,但x的長度仍然是n。如果我需要一個長度爲n-1的數組,我需要將所有元素從x(j + 1):x(n)移到左邊,並在移位後切斷最後一個索引。想到這一點,這樣做並不會那麼昂貴...... – locke14