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
我有一个非常大的矩阵 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