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

每次这给我一个不同的数组时,例如:

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

我想知道是否有可能创建成对的随机数,以便最终得到像x这样的代码:
x = [3 4 1 2 5 6]

我需要对 vector 进行排列,以使1和2总是彼此相邻,3和4彼此相邻,而5和6彼此相邻。因为我正在用Psychtoolbox做某事,所以此顺序很重要。

是否可以具有随机顺序的“块”?我不知道该怎么做。

谢谢

最佳答案

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

  • 产生2*randperm(3)
  • 将值
  • 加倍
  • 为每对添加randperm(2)-2(随机排序的一对(-1,0))。

  • 在代码中:
    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
    

    关于arrays - 对随机数Matlab,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45786911/

    10-12 04:01