我想制作一个随机排列的二维数组,其中每一行可能包含在前一行中生成的数字。但是在同一行中不能有相同的数字。
是否有以下代码执行no for for循环?
a = (1:100);
b = zeros(size(a,2), 4);
for i = 1:size(a, 2)
r = randperm(size(a, 2),4);
b(i,:) = r;
end
答案 0 :(得分:1)
如果您没有内存限制,则可以使用以下方法(当仅实际需要" 4"列时,它会生成中间" 100" - 列矩阵):
sort
的第一个输出轻松完成(模仿旧的Matlab版本中randperm
的编码方式)。代码:
a = 1:100;
n = 4;
[~, result] = sort(rand(numel(a)),2); %// step 1
result = result(:, 1:n); %// step 2
答案 1 :(得分:0)
产生类似结果的一种不那么有效的方式(主要是因为排序)是:
[dummy, idx] = sort(rand(100, 4));
b = idx';
正如所指出的,这会生成一个包含非重复元素行的数组b
,但它有4行100列而不是相反的行。请改用路易斯的解决方案。