我有一个从1到40的向量,并希望以这样的方式对其进行混洗:每个四个整数的块(总共十个块)只能自己进行洗牌。
例如:3 4 2 1 | 7 6 5 8 | 9 11 10 12 | ...
我最初的想法是将十个排列向量附加到彼此,然后在大排列向量中添加1到40个向量,但它根本没有按预期工作,并且在逻辑上是错误的。
有谁知道如何解决这个问题?
答案 0 :(得分:2)
data = 10:10:120; % input: values to be permuted
group_size = 4; % input: group size
D = reshape(data, group_size, []); % step 1
[~, ind] = sort(rand(size(D)), 1); % step 2
result = D(bsxfun(@plus, ind, (0:size(D,2)-1)*group_size)); % step 3
result = result(:).'; % step 4
示例结果:
result =
20 10 30 40 60 50 70 80 110 100 120 90
答案 1 :(得分:2)
您可以使用A = A(randperm(length(A)))
来重新排列数组。
Octave的例子:
for i = 1:4:40
v(i:i+3) = v(i:i+3)(randperm(4));
end