MATLAB - 条件是每 x 次循环只做一次
MATLAB - Condition to do something only once every x number of loops
我正在尝试将 z
的值更改为 +1 每 750、1500、2250 等 循环,这就是我写的:
len = 1500000;
y = 750;
z = 1;
for i = 1:len
if (i == [y.*(1:2000)])
z = z + 1;
end
end
为什么 z
的值没有变化?有人可以告诉我我的 if
陈述有什么问题吗?
MATLAB 只认为一个数组是true
如果 所有元素都是true
。因此,考虑到这一点,如果我们查看您的 if
语句
的条件
i == (y .* (1:2000))
这个 returns 是一个包含 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
我正在尝试将 z
的值更改为 +1 每 750、1500、2250 等 循环,这就是我写的:
len = 1500000;
y = 750;
z = 1;
for i = 1:len
if (i == [y.*(1:2000)])
z = z + 1;
end
end
为什么 z
的值没有变化?有人可以告诉我我的 if
陈述有什么问题吗?
MATLAB 只认为一个数组是true
如果 所有元素都是true
。因此,考虑到这一点,如果我们查看您的 if
语句
i == (y .* (1:2000))
这个 returns 是一个包含 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