MatLAB帮助:在不连续重复数字的情况下对预定义向量进行混洗(所有值都相等)

mue*_*mue 1 random matlab shuffle octave

考虑到每个值都重复相同,我在随机改组矢量而不重复数字时遇到麻烦(例如,11是不可接受但是1 2是可接受的).

更具体地说,我想重复矩阵[1:4]十次(总共40个元素),这样1,2,3和4都会重复10次而不是连续的.

如果需要澄清,请告诉我,我希望这个问题很明确.

这是我到目前为止:

cond_order = repmat([1:4],10,1); %make matrix
cond_order = cond_order(:); %make sequence
Run Code Online (Sandbox Code Playgroud)

我知道randperm非常相关,但我不确定如何使用非重复数字的一个条件.

编辑:谢谢你的所有回复.

  1. 我意识到我还不清楚.这些是我想拒绝的例子[1 1 2 2 4 4 4...].因此[1 2 3 4],只要不重复单个值,是否按顺序发生并不重要.(所以无论[1 2 3 4 1 2 3 4...][4 3 1 2...]是可接受的)

  2. 最好是我正在寻找符合标准的洗牌矢量

    1. 它是随机的
    2. 没有连续重复的值(例如1 1 4 4)
    3. 所有四个值都显示相等的次数

mik*_*ola 5

使用拒绝抽样的想法,只需重复randperm直到找到没有重复值的序列排列.

cond_order = repmat(1:4,10,1); %//make matrix
N = numel(cond_order); %//number of elements
sequence_found = false;
while ~sequence_found
    candidate = cond_order(randperm(N));
    if all(diff(candidate) ~= 0) %// check if no repeated values
        sequence_found = true;
    end
end
result = candidate;
Run Code Online (Sandbox Code Playgroud)