在Matlab中重复和随机化矩阵时约束Shuffle

时间:2011-09-01 10:16:24

标签: matlab

我试图在实验过程中得到一些刺激的排序,但是下面有一点问题。所以我有一个8个图像的列表,每个图像的数字为1-8。我需要在每个试验中显示2位数。所以每个数字需要显示9次,总共有72个演示文稿。但是,相同的两位数字不能出现在同一个试验中。另外,我不能经常出现相同的两位数字。

我尝试了几种不同的方法,但仍然让奇数加倍。

所以,例如。如果我这样做:

images = [ 1 2 3 4 5 6 7 8];  
images = Shuffle(images);
images = repmat(images, 1, 9);  
images = reshape(images, 36, 2);  
images = shake(images, 2) %where shake is a function that shuffles the rows

它不会在同一行中给出相同的数字,但相同的数字总是一起出现,例如。你会得到3 6,然后是6 3

因为它不一定必须是36 x 2 matric的形式,它可能是72 x 1向量 - 我想一个选项可能是重复和洗牌行,将shuffle放在一个循环中限制任何加倍,

e.g。

not_good = true;  
while not_good  
not_good = false;  
vector = shuffle(repeated_vector);  
if (gets a bit hazy here, something to say if two consecutive values are equal)  
not_good = true;  
end  
end  

但老实说,我愿意接受建议,并且非常感谢任何帮助/澄清。

1 个答案:

答案 0 :(得分:0)

像Amro所说:使用nchoosek来获取所有图像对。

然后使用randperm随机化订单。

nImages = 8;
pairs = nchoosek(1:nImages, 2);
nPairs = size(pairs, 1);
order = randperm(nPairs);
randomisedPairs = pairs(order, :)