12

我有一个 martix 并想改组它的元素。

x=[1 2 5 4 6 ]

洗牌后(像这样)

x=[2 4 6 5 1]    

matlab 有它的功能吗? 在 php array_shuffle 中执行此操作。

4

2 回答 2

24
  1. 使用randperm

    idx = randperm(length(x));
    
  2. 使用索引来获得洗牌向量

    xperm = x(idx);

于 2012-11-06T18:29:31.900 回答
6

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

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

请注意,它是“无替换”(默认情况下)。因此,如果设置klength(x),则相当于对向量进行随机洗牌。例如:

x = 1:5;
randsample(x,length(x))
%ans = 
%       4     5     3     1     2

I like this more than randperm, because it is easily extensible to different uses. For example, to draw 3 elements from x at random (like drawing from a bucket with finite items), you do randsample(x,3). Likewise, if you wish to draw 3 numbers, where the alphabet is made up of the elements of x, but allow for repetitions, you do randsample(x,3,true).

于 2012-11-06T21:47:12.767 回答