当一个参数保持不变时,快速进行knnsearch

时间:2013-10-26 22:50:33

标签: matlab search for-loop knn parfor

我有以下问题。

for i=1:3000
    [~,dist(i,1)]=knnsearch(C(selectedIndices,:),C);
end

让我解释一下上面的代码。矩阵C是一个巨大的矩阵(300000 x 1984)C(selectedIndices,:)是C的100个元素的子集,具体取决于i的值。这意味着:对于i=1,会选择前100个C点,对于i==2,会选择C(101:200,:)。如您所见,第二个参数保持不变。

有没有办法让这项工作更快。我尝试过以下方法:

-  [~,dist(i,1)]=knnsearch(C,C); %obviously goes out of memory
  • 发送更大的selectedIndices块而不是仅发送100个。这增加了一些我不担心的后处理。但这不起作用,因为它需要相同的时间。例如,如果我一次发送100个C点,则需要60秒。如果我发送500,则后处理需要380秒。

  • 尝试使用parfor:不同的selectedIndices组将并行执行。它不起作用,因为可能已经创建了两个大矩阵C的副本(不确定parfor是如何工作的),但我确信计算机变得非常慢,反过来否定了parfor的优势。

    < / LI>
  • 尚未尝试:将两个参数分解为较小的块并将其发送到parfor中。你认为这会有什么不同吗?

我对任何建议持开放态度,即如果你觉得以某种不同的方式制动矩阵可能会加快计算速度,那就建议一下。因为,最后我只关心从C中的每个点找到一组点的最近点(这里每组有100个点)。

0 个答案:

没有答案