【问题标题】:MATLAB - Condition to do something only once every x number of loopsMATLAB - 每 x 次循环仅执行一次的条件
【发布时间】:2017-06-03 14:24:17
【问题描述】:

我正在尝试将z 的值更改为 +1750th, 1500th, 2250th,...,etc 循环,这就是我所拥有的写:

len = 1500000;
y = 750;
z = 1;
for i = 1:len
    if (i == [y.*(1:2000)])
        z = z + 1;
    end
end

为什么z 的值没有变化?谁能告诉我我的if 声明有什么问题?

【问题讨论】:

    标签: matlab loops for-loop logic logical-operators


    【解决方案1】:

    MATLAB 仅将数组视为true 如果所有元素都是true。因此,考虑到这一点,如果我们查看您的 if 语句的条件

    i == (y .* (1:2000))
    

    返回的是一个包含 2000 个值的数组,其中它们要么全部为 false(在 i 不是 y 的倍数的情况下),要么全部为 false,除了一个 true 值几时。即使有一个true,它仍然会评估为false,并且您的if 语句将永远不会被评估。

    更好的方法是使用mod 检查给定的i 是否是y 的倍数

    if mod(i, y) == 0
        z = z + 1;
    end
    

    但是,如果循环的唯一内容是您显示的内容,那么您可以简单地省略您不关心的迭代

    for i = y:y:len
        z = z + 1;
    end
    

    如果您确实想要比较显示的数组,最好在循环之外计算 y .* 1:2000,然后使用 ismember 来查看 i 是否在数组中

    tmp = y .* (1:2000);
    
    for i = 1:len
        if ismember(i, tmp)
            z = z + 1;  
        end
    end
    

    【讨论】:

    • 非常感谢!现在这很有意义。
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2021-09-03
    • 2018-09-11
    相关资源
    最近更新 更多