MATLAB-每x个循环只执行一次的条件

MATLAB-每x个循环只执行一次的条件,matlab,loops,for-loop,logic,logical-operators,Matlab,Loops,For Loop,Logic,Logical Operators,我试图通过+1每750次、1500次、2250次等循环更改z的值,这是我写的: len = 1500000; y = 750; z = 1; for i = 1:len if (i == [y.*(1:2000)]) z = z + 1; end end 为什么z的值不变?有人能告诉我我的if语句有什么问题吗?如果所有元素都true,MATLAB只认为数组是true。记住这一点,如果我们看一下你的if语句的条件 i == (y .* (1:2000)) 它返回

我试图通过+1750次、1500次、2250次等循环更改
z
的值,这是我写的:

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

为什么
z
的值不变?有人能告诉我我的
if
语句有什么问题吗?

如果所有元素都
true
,MATLAB只认为数组是
true
。记住这一点,如果我们看一下你的
if
语句的条件

i == (y .* (1:2000))
它返回的是一个2000个值的数组,其中它们要么都是
false
(在
i
不是
y
的倍数的情况下)要么都是
false
,只有一个
true
值除外。即使存在一个
true
,它的计算结果仍然是
false
,并且您的
if
语句将永远不会被计算

更好的方法是使用检查给定的
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

如果所有元素均为
true
,则MATLAB仅将数组视为
true
。记住这一点,如果我们看一下你的
if
语句的条件

i == (y .* (1:2000))
它返回的是一个2000个值的数组,其中它们要么都是
false
(在
i
不是
y
的倍数的情况下)要么都是
false
,只有一个
true
值除外。即使存在一个
true
,它的计算结果仍然是
false
,并且您的
if
语句将永远不会被计算

更好的方法是使用检查给定的
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

非常感谢你!这很有道理,非常感谢!现在这很有道理。