使用以前的值Matlab替换数组中的值

时间:2015-04-23 09:54:36

标签: arrays matlab

原始问题

所以,如果我有一个数组,s:

s= [4 5 2 5 8 4 11 6]

如何将大于6的任何数字替换为等于之前的数字。给予以下:

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]

2 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:0)

您需要做的就是迭代数组的所有值并检查当前值是否大于前一个值的两倍(如果是,则可以将&gt;替换为&gt; =(大于或等于)你需要什么。只要满足你所需要的条件,你只需要将s(i-1)中的值,即前一个索引复制到s(i)即当前位置。

你的循环从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