从Octave中的向量中随机选取一个数字

时间:2015-03-08 01:17:19

标签: matlab random octave

St=[-1 5 -1 2 ; -1 6 1 3 ; -1 7 2 4; -1 8 3 -1 ; 1 9 -1 6 ; 2 10 5 7 ; 3 11 6 8 ; 4 12 7 -1; 5 -1 -1 10 ; 6 -1 9 11 ; 7 -1 10 12 ; 8 -1 11 -1];
countlegal=0;
a=2;
X=St(2,:); % pull out the entire row of R to find out other actions
%count the other legal moves apart from a

for i=1:4,
   if X(i)==-1  || i==a %dont count if a or illegal move
      continue;
    else
      countlegal=countlegal+1;

      Ac(countlegal)=i;
      Ac
    end
  end

  if size(Ac,2)==1
  a1=Ac
  else
  a1=datasample(Ac,1);%comment 1: this command does not work , here I want to pick an element randomly from Ac
  end
  a1
  

Ac是一个动态赋值的行向量。我想从Ac中选择一个元素并将其分配给a1。数据采样命令(comment1)不起作用,randperm不起作用,因为它生成从1到n的数字。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

为什么不使用randi

a1 = Ac(randi(size(Ac,2),1));

randi返回给定最大值的随机整数。在您的情况下,您希望这是Ac的长度,并且您想从那里选择一个随机元素。 randi(size(Ac,2), 1)将返回一个介于1和Ac长度之间的随机元素。我们使用它来索引Ac来挑选一个随机元素。