2013-11-03 54 views
3

選擇1個值的第一n我有一個二元載體,例如從二進制向量(0,1)在MATLAB

x = [1 1 1 0 0 1 0 1 0 0 0 1] 

我想保持前4個元素是「1」 (用0代替其餘部分)。在我的例子中,結果載體應該是:

z = [ 1 1 1 0 0 1 0 0 0 0 0 0] 

任何幫助將不勝感激。

回答

5

首先構建零向量,然後使用find

z = false(size(x)); 
z(find(x, 4)) = true; 
0

嘗試以下操作:這裏

z=x; 
A=find(z); 
z(A(5:end))=0; 

想法是讓所有,但前n,1對0的

+0

雙下標在MATLAB中不起作用。你需要一箇中間變量。 –

+0

@EitanT我現在沒有Matlab。但使用'Octave'進行測試,它工作正常。不確定它是否兼容。 – jkshah

+0

@jkshah當涉及到雙腳本 - matlab和八度是**不** **兼容 – Shai

3

對於二元向量,不需要find。改用cumsum

>> z = x; 
>> z(cumsum(z, 2) > 4) = 0; 

該解決方案(不像find基於答案)可以處理這樣的二元矢量一次的堆棧(所有你需要的是驗證cumsum作品在適當的尺寸)。

+1

仍然'O(n)',但效率較低,不那麼直觀:) –

+0

現在你只是過於複雜的問題:) –

+1

請注意,你的解決方案也不適用於矩陣(你搞砸索引了一下) 。我冒昧給你修理它。 –