randperm()会产生几个随机排列吗?

Tim*_*Tim 5 matlab

在Matlab中

p = randperm(n,k)返回一个行向量,其中包含从1到n(包括1和n)随机选择的k个唯一整数.

可以调用randperm()返回几行向量,每个向量都是如上所述吗?如果没有,是否有其他方法可以生成多个随机排列?

在这种情况下,避免循环必然会更快吗?

谢谢!

yuk*_*yuk 5

RANDPERM本身只返回一个排列.如果你想避免循环,可以使用ARRAYFUN调用它:

Nperm = 5; 
N = 6;
result = arrayfun(@(x)randperm(N),(1:Nperm)','UniformOutput',0);
Run Code Online (Sandbox Code Playgroud)

这将返回Nperm x 1单元阵列.要将其转换为矩阵,您可以使用CELL2MAT:

result = cell2mat(result);
Run Code Online (Sandbox Code Playgroud)

还有PERMS函数可以返回所有排列,但它只适用于少数.

还要检查FileExchange提交ALLCOMB,PERMS他人.