Matlab 行的随机顺序

Matlab 行的随机顺序,matlab,shuffle,Matlab,Shuffle,假设我们有一个100x3大小的矩阵 如何在MATLAB中洗牌这些行 要洗牌矩阵的行,可以使用 randperm将生成一个N随机值列表并对其进行排序,返回sort的第二个输出作为结果 这可以通过Matlab的randsample函数为矩阵行创建一个新的随机索引来实现 matrix=matrix(randsample(1:length(matrix),length(matrix)),:); 对于大型数据集,可以使用自定义函数 它使用了D.E.Knuth的洗牌算法(也称为Fisher-Yates)和

假设我们有一个100x3大小的矩阵


如何在MATLAB中洗牌这些行

要洗牌矩阵的行,可以使用


randperm
将生成一个
N
随机值列表并对其进行排序,返回
sort
的第二个输出作为结果

这可以通过Matlab的randsample函数为矩阵行创建一个新的随机索引来实现

matrix=matrix(randsample(1:length(matrix),length(matrix)),:);

对于大型数据集,可以使用自定义函数

它使用了D.E.Knuth的洗牌算法(也称为Fisher-Yates)和可爱的亲吻随机数生成器(G.Marsaglia)

读这本书的时候,我发现它有点难读,难理解。在Mathworks中,我发现了一个类似的例子,答案更可读,更容易理解。根据Mathworks的想法,我编写了一个函数:

function ret = shuffleRow(mat)

[r c] = size(mat);
shuffledRow = randperm(r);
ret = mat(shuffledRow, :);

事实上,它做的和你的一样。但我认为它更易读,更容易理解。

它的可能副本不是关于选择,而是关于“解吸器”或洗牌矩阵的行。实际上,你是对的。这不是完全相同的问题。见下面我的答案。你的解决方案比我的快2.5倍,至少在我的电脑上。谢谢Jonas。工作起来很有魅力。如果您想对矩阵的列进行无序排列,解决方案是:shuffledArray=orderedArray(:,randperm(size(orderedArray,2))),我想您的意思是使用
“false”
-如果使用替换进行采样,结果矩阵将包含重复的行,而其他行将消失。在不进行替换的采样情况下,
randsample
调用
randperm
,因此这应该只比直接调用
randperm
稍微慢一点。
function ret = shuffleRow(mat)

[r c] = size(mat);
shuffledRow = randperm(r);
ret = mat(shuffledRow, :);