MATLAB以不同方式随机排列列

Posted

技术标签:

【中文标题】MATLAB以不同方式随机排列列【英文标题】:MATLAB randomly permuting columns differently 【发布时间】:2015-05-23 06:56:45 【问题描述】:

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

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

但快速有效。 (M和N都很大,这只是一个更大的外循环中的一个内循环。)

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

我有没有希望避免在循环中这样做?

抱歉,如果这已经被问到了。谢谢!

【问题讨论】:

【参考方案1】:

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

[~, 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

【讨论】:

很高兴它成功了!那很简单 :-) 我想知道为什么 randperm 不能以这种方式一次生成多个排列 同意,似乎是一个非常简单的扩展! 请注意,使用此方法的冲突概率非零:即如果rand 的输出中有重复数字怎么办?此外,生成这样的 NxM 矩阵具有 O(N M log(M)) 时间复杂度,而不是最佳 O(N M)。见en.wikipedia.org/wiki/Shuffling#Shuffling_algorithms 输出中有重复的数字不是问题。 sort 只会保持它们的相对顺序以产生输出

以上是关于MATLAB以不同方式随机排列列的主要内容,如果未能解决你的问题,请参考以下文章

以随机顺序重新排列NSArray / MSMutableArray

matlab:获取特定逻辑矩阵的所有排列

matlab中已知一矩阵,如何将其中的已知的元素打乱顺序进行随机排列得到新的矩阵,如:

matlab 全部的随机数函数之内部函数

我需要以相同的随机方式随机打乱两个熊猫数据帧的行

为啥以两种不同方式应用随机森林分类器的特征选择结果不同