【发布时间】:2011-12-30 20:39:58
【问题描述】:
我发现在我的 matlab 函数中花费了 很多 时间在这段代码中:
intersect(freq_bins, our_bins);
两者都可以是相当大的向量,并且仅由整数组成。我只需要知道两者中都有哪些整数。这确实是 intersect() 的原始目的,所以我怀疑答案是:它并没有变得更好。但也许有人有一些建议。
【问题讨论】:
-
1) 它是“组成”而不是“组成”:) 2) 原则上,相交的未排序列表需要 O(N^2),但相交的排序列表需要 O(N)。排序本身是 O(Nlog(N)),所以正如@Jonas 所说,你可以用排序的向量自己做得更好。
-
@MikeDunlavey:在这种情况下提高速度的主要原因是您可以避免输入检查以及调用多个函数的开销。
-
@Jonas:我相信你是对的。我最喜欢的例子是用于乘法/缩放矩阵的 LAPACK 例程 DGEMM。人们会期望它被优化到第 n 级,但除非矩阵非常大,否则它会花费大部分时间调用 LSAME 来对其输入标志进行分类。它的真正目标是为程序员节省编码工作,而不一定是速度。
标签: performance matlab optimization intersection