成对的随机数Matlab

时间:2017-08-20 21:21:14

标签: arrays matlab random psychtoolbox

我正在尝试使用Matlab' randperm生成1到6之间的随机数并调用randperm = 6

每次这给我一个不同的数组时,让我们说一下:

x = randperm(6)
x = [3 2 4 1 5 6]

我想知道是否可以创建一对随机数,以便最终得到x,如:

x = [3 4 1 2 5 6]

我需要对矢量进行排列,使得1和2总是彼此相邻,3和4彼此相邻,5和6彼此相邻。因为我在Psychtoolbox做某事,这个顺序很重要。

是否可以拥有"阻止"随机顺序?我无法弄清楚如何去做。

由于

2 个答案:

答案 0 :(得分:4)

x=1:block:t ;    %Numbers
req = bsxfun(@plus, x(randperm(t/block)),(0:block-1).');  %generating random blocks of #
%or req=x(randperm(t/block))+(0:block-1).' ; if you have MATLAB R2016b or later
req=req(:);      %reshape

其中,
 t =总数
 block =一个块中的数字 功能

%Sample run with t=12 and block=3
>> req.'

ans =

    10    11    12     4     5     6     1     2     3     7     8     9

修改
如果您还希望每个块中的数字按随机顺序排列,请在上面代码的最后一行之前添加以下3行

[~, idx] = sort(rand(block,t/block));              %generating indices for shuffling
idx=bsxfun(@plus,idx,0:block:(t/block-1)*block);   %shuffled linear indices
req=req(idx);                                      %shuffled matrix

%Sample run with t=12 and block=3
req.'

ans =

     9     8     7     2     3     1    12    10    11     5     6     4

答案 1 :(得分:3)

我可以看到一个简单的3步过程来获得所需的输出:

  1. 制作2*randperm(3)
  2. 将值加倍
  3. 为每对添加randperm(2)-2(随机排列的(-1,0)对)。
  4. 在代码中:

    x = randperm(3)
    y = 2*x([1 1 2 2 3 3])
    z = y + ([randperm(2),randperm(2),randperm(2)]-2)
    

    结果

    x = 3 1 2
    y = 6 6 2 2 4 4
    z = 6 5 2 1 3 4