MATLAB 以不同方式随机排列列

MATLAB randomly permuting columns differently

我有一个非常大的矩阵 A,有 N 行和 M 列。我想基本上做下面的操作

for k = 1:N
    A(k,:) = A(k,randperm(M));
end

但又快又高效。 (M和N都很大,这只是更大外环中的内环。)

更多上下文:我正在尝试对相关矩阵 (http://en.wikipedia.org/wiki/Resampling_%28statistics%29) 实施置换测试。我的数据很大,很不耐烦。如果有人知道实施此类测试的快速方法,我也将很高兴听到您的意见!

我是否希望避免在循环中执行此操作?

如果有人问过这个问题,我们深表歉意。谢谢!

如果您键入 open randperm(至少在 Matlab R2010b 中),您会看到输入 M 的输出 p 只是

[~, p] = sort(rand(1,M));

因此,要将其矢量化为 N 行,

[~, P] = sort(rand(N,M), 2);

因此,生成P并使用linear indexing进入A

[~, P] = sort(rand(N,M), 2);
A = A(bsxfun(@plus, (1:N).', (P-1)*N));

示例:给定

N = 3;
M = 4;
A = [ 1     2     3     4
      5     6     7     8
      9    10    11    12 ];

一个(随机)结果是

A =
     2     3     1     4
     7     5     8     6
     9    11    12    10