原始的問題
所以,如果我有一個數組,S:替換值在磁盤陣列和前值Matlab的
s= [4 5 2 5 8 4 11 6]
我怎麼會去更換任何數量大於6等於先前的數。給予s到是:
s=[4 5 2 5 5 4 4 6]
更新問題
我想檢查的數量至少增加一倍對上號,如果是與以前的更換次數。使用不同的例子以上,S:
s= [8 9 3 6 7 2 5]
將被替換,S:
s= [8 9 3 3 3 2 2]
所以,如果我有一個數組,S:替換值在磁盤陣列和前值Matlab的
s= [4 5 2 5 8 4 11 6]
我怎麼會去更換任何數量大於6等於先前的數。給予s到是:
s=[4 5 2 5 5 4 4 6]
我想檢查的數量至少增加一倍對上號,如果是與以前的更換次數。使用不同的例子以上,S:
s= [8 9 3 6 7 2 5]
將被替換,S:
s= [8 9 3 3 3 2 2]
所有你需要做的是,重複你的陣列超過所有的值,並檢查當前值大於前一次值的兩倍(如果這是你所需要的,你可以用> =(大於或等於)替換>)並且只要你滿足所需的條件,你只需要從s(i-1 )即先前索引s(i)即當前位置。
您r循環從i = 2開始而不是1,因爲在i = 1的情況下沒有先前的值來檢查。在大多數語言中,MALTAB索引從i開始而不是0。
s = [4 2 7 5 1];
for i=2:numel(s)
if s(i) > 2*s(i-1)
s(i) = s(i-1);
end
end
使用cummax
功能(在R2014b介紹):
s = s(cummax((s<=6).*(1:numel(s))));
例子:
>> s = [5 7 9 2 5 8 4 11 6]
s =
5 7 9 2 5 8 4 11 6
>> s = s(cummax((s<=6).*(1:numel(s))))
s =
5 5 5 2 5 5 4 4 6
你期待'S = [5,7,9]'什麼輸出,可能是'[5,5,7]'或'[5,5,5]'或者不可能有數字序列> 6?你有沒有試過用for循環解決這個問題? – Daniel
對於s = [5,7,9]它應該給[5,5,5] – MRaff16
@丹尼爾好抓! –