从排序的向量中对块子集进行排序

时间:2015-08-31 19:46:19

标签: matlab sorting

我在Matlab工作,我有一个未分类的矢量 X 。然后我通过采用随机块从 X 中提取随机子集,并将子集表示为 Y 。例如,我们可以 Y = X ([1:3,10:12,16:18])。每次在for循环中随机提取向量 Y ,并且需要在对其执行进一步工作之前对其进行排序。这是一些伪代码:

X=vector;
Z=zeros(1000,1);
for k=1:1000
   randomblocks=... % obtain the random blocks
   Y=X(randomblocks);
   Ysort=sort(Y);
   Z(k)=dosomething(Ysort);
end

由于重复排序,这可能会变慢。我的问题是,我们可以通过某种方式在for循环之前对 X 进行排序,但是在for循环中以某种方式提取相同的点,以便它们排序出来?我不能只选择 X 的排序版本的随机子集,因为排序 X 会破坏块结构。我尝试过几种方法,但结果却变慢了。

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的loop免费方法:

%generate all random indices at once
idx = randomblocks(numel_block , 1000);
%generate all Ys at once, organized with blocks along the first dimension, iterations along the second
Y = reshape( X(idx) , [numel_block 1000]); 
%sort along the block dimension
Ysort = sort(Y,1);

现在取决于Z = dosomething(Ysort)看起来像这可能会进入它自己的循环或类似arrayfun()之类的东西。