为什么我的 if 语句没有给我预期的结果?
Why is my if statement not giving me the intended result?
给定一组元素(以行向量 Vi
表示),我使用 [ki] = find(Vi==max(max(Vi)))
将最大值提取到另一个(行)向量(名为 'ki')中。我说 values 因为很多数字重复。我必须在所有重复值之间随机选择并知道所选值的列。为此,我编写了以下代码。
ri=rand(1)
for j=1:length(ki)
if ((j-1)/length(ki)<ri<=j/length(ki))
mi=ki(j)
endif;
endfor
if (ri==0)
mi=ki(1)
endif
问题是它总是给我mi=ki(last 'j' of the for cycle)
(在本例中是mi=ki(length(ki))
)。为什么?
表达式 ((j-1)/length(ki)<ri<=j/length(ki))
与您认为的不一样。 Matlab / Octave 不支持 "chaining" 的操作。您的逻辑测试应该改为:
((j-1)/length(ki)) < ri && ri <= (j/length(ki))
相反,您正在做的是首先计算 ((j-1)/length(ki)) < ri
,这会给您一个 0
或一个 1
,然后您要检查 [=13] =] 或 1
小于或等于 (j/length(ki))
给定一组元素(以行向量 Vi
表示),我使用 [ki] = find(Vi==max(max(Vi)))
将最大值提取到另一个(行)向量(名为 'ki')中。我说 values 因为很多数字重复。我必须在所有重复值之间随机选择并知道所选值的列。为此,我编写了以下代码。
ri=rand(1)
for j=1:length(ki)
if ((j-1)/length(ki)<ri<=j/length(ki))
mi=ki(j)
endif;
endfor
if (ri==0)
mi=ki(1)
endif
问题是它总是给我mi=ki(last 'j' of the for cycle)
(在本例中是mi=ki(length(ki))
)。为什么?
表达式 ((j-1)/length(ki)<ri<=j/length(ki))
与您认为的不一样。 Matlab / Octave 不支持 "chaining" 的操作。您的逻辑测试应该改为:
((j-1)/length(ki)) < ri && ri <= (j/length(ki))
相反,您正在做的是首先计算 ((j-1)/length(ki)) < ri
,这会给您一个 0
或一个 1
,然后您要检查 [=13] =] 或 1
小于或等于 (j/length(ki))