2012-11-06 255 views
10

我有一个martix,想打乱它的元素。matlab中的shuffle矩阵元素

x=[1 2 5 4 6 ] 

洗牌(像这样)后

x=[2 4 6 5 1]  

是MATLAB具有的功能呢? 在php array_shuffle这样做。使用randperm

idx = randperm(length(x)); 
  • 使用索引

  • 回答

    21
    1. 获得洗牌索引以获得混洗矢量

      xperm = x(idx);

    3

    作为替代品randperm,也可以使用randsample来回统计工具箱。

    y = randsample(n,k)返回随机均匀采样值的k -by- 1矢量y,无需更换,从整数1n

    请注意,它是“没有替换”(默认情况下)。因此,如果您将k设置为length(x),则相当于对矢量进行随机洗牌。例如:

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

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