matlab中的shuffle矩阵元素

Yus*_*sef 12 matlab

我有一个马丁,想要改变它的元素.

x=[1 2 5 4 6 ]
Run Code Online (Sandbox Code Playgroud)

洗牌之后(像这样)

x=[2 4 6 5 1]    
Run Code Online (Sandbox Code Playgroud)

matlab有功能吗? 在php array_shuffle中执行此操作.

Aco*_*rbe 23

  1. 使用获得改组指数 randperm

    idx = randperm(length(x));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用索引来获得混洗向量

    xperm = x(idx);


abc*_*bcd 6

作为 的替代randperm,您还可以randsample从统计工具箱中使用。

y = randsample(n,k)返回从整数到 的随机均匀采样的值的k逐个1向量y,无需替换。1n

请注意,它是“无需替换”(默认情况下)。所以如果设置klength(x),就相当于对向量做了一个随机的shuffle。例如:

x = 1:5;
randsample(x,length(x))
%ans = 
%       4     5     3     1     2
Run Code Online (Sandbox Code Playgroud)

我更喜欢这个randperm,因为它很容易扩展到不同的用途。例如,要从x随机抽取 3 个元素(例如从具有有限项的桶中抽取),您可以执行randsample(x,3). 同样,如果您想绘制 3 个数字,其中字母表由 的元素组成x,但允许重复,则可以randsample(x,3,true)