2012-11-06 253 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)