在矩阵中创建新行,其中这些行的元素必须与以前的行不同(相同的行不能出现两次)Matlab

时间:2018-01-04 00:29:56

标签: matlab

我正在尝试生成3x2矩阵。每行都使用randperm(3,2)生成。这意味着每一行都是作为一个向量生成的,具有2个唯一的整数,其值介于1和3之间。

问题在于我希望每个新行与前一个不同。例如,如果一行是[1 3]则没有其他行可以是:

  • [1 3],也不是
  • [3 1]。

我尝试检查每个新创建的行的总和和乘积值。 (使用我们的示例1+3=41*3=3

我的想法是将每个新生成的行的相乘值和总和值与之前的每个其他行的相乘值和总和值进行比较。如果这些值中的任何一个相同(这意味着我们将重复),我们将继续使用randperm(3,2)生成一个新行,直到获得一个全新的行。

我的代码一次检查每一行,然后“忘记”之前检查过的每一行。它没有考虑所有前面的行,而是一次只迭代一步。我尝试使用像父母一样的东西(i:-1:1)而不是父母(i-k,1)等,但却无法使其发挥作用。

问题:我该如何进行比较?

parents=randperm(3,2);
for i=2:3
parents=[parents; randperm(3,2)]

for k=1:i-1
    while prod(parents(i,:))==prod(parents(i-k,:)) && sum(parents(i,:))==sum(parents(i-k,:))
        parents(i,:)=randperm(3,2)
    end  
end
i=i+1;
end

1 个答案:

答案 0 :(得分:0)

下载this function,然后按如下方式使用它:

% generate all the possible permutations
p = permn(1:3,2);

% generate a random permutation of the indices and take the first three
r = randperm(size(p,1));
idx = r(1:3);

% take three random rows from the possible permutations using the indices
result = p(idx,:);

这样:

  • 您永远不会在result矩阵
  • 中获得与另一行相同的行
  • 你不会被迫使用" shuffle直到满足条件"方法
  • 您有可重用且灵活的方法