我有一个非常大的矩阵 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 中)你会看到它的输出p
对于一个输入M
is just
[~, p] = sort(rand(1,M));
因此,将其矢量化为N
rows,
[~, P] = sort(rand(N,M), 2);
因此,生成P
并使用线性分度 into 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)