为什么我的 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))