假设我们有一个大小为100x3的矩阵
你如何在MATLAB中对行进行洗牌?
答案 0 :(得分:70)
要对矩阵的行进行随机播放,您可以使用RANDPERM
shuffledArray = orderedArray(randperm(size(orderedArray,1)),:);
randperm
将生成N
个随机值列表并对其进行排序,并返回sort
的第二个输出结果。
答案 1 :(得分:5)
这可以通过Matlab的 randsample 函数为矩阵行创建一个新的随机索引来完成。
matrix=matrix(randsample(1:length(matrix),length(matrix)),:);
答案 2 :(得分:2)
在阅读answer of Jonas时,我发现它有点难以阅读,难以理解。在Mathworks中,我发现了一个类似的question,其答案更易读,更易于理解。从Mathworks中获取想法我写了一个函数:
function ret = shuffleRow(mat)
[r c] = size(mat);
shuffledRow = randperm(r);
ret = mat(shuffledRow, :);
实际上它与Jonas' answer的作用相同。但我认为它更易读,更容易理解。
答案 3 :(得分:1)
对于大型数据集,您可以使用自定义Shuffle函数
它使用D.E. Knuth的shuffle算法(也称为Fisher-Yates)和可爱的KISS随机数发生器(G. Marsaglia)。