我在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 会破坏块结构。我尝试过几种方法,但结果却变慢了。
答案 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()
之类的东西。