選擇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]
任何幫助將不勝感激。
選擇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]
任何幫助將不勝感激。
首先構建零向量,然後使用find
:
z = false(size(x));
z(find(x, 4)) = true;
嘗試以下操作:這裏
z=x;
A=find(z);
z(A(5:end))=0;
想法是讓所有,但前n,1對0的
對於二元向量,不需要find
。改用cumsum
!
>> z = x;
>> z(cumsum(z, 2) > 4) = 0;
該解決方案(不像find
基於答案)可以處理這樣的二元矢量一次的堆棧(所有你需要的是驗證cumsum
作品在適當的尺寸)。
仍然'O(n)',但效率較低,不那麼直觀:) –
現在你只是過於複雜的問題:) –
請注意,你的解決方案也不適用於矩陣(你搞砸索引了一下) 。我冒昧給你修理它。 –
雙下標在MATLAB中不起作用。你需要一箇中間變量。 –
@EitanT我現在沒有Matlab。但使用'Octave'進行測試,它工作正常。不確定它是否兼容。 – jkshah
@jkshah當涉及到雙腳本 - matlab和八度是**不** **兼容 – Shai