我正在研究一些处理大型(但不是大型)数据集的matlab代码:10,000 784个元素向量(非稀疏),并计算有关存储在10,000x10稀疏矩阵中的信息。为了使代码正常工作,我迭代地完成了一些棘手的部分,对10k项进行循环处理以处理它们,并对稀疏矩阵中的10项进行循环处理以进行清理。
我的过程最初需要进行73次迭代(因此大约730k循环),然后运行了大约120秒。不错,但这是matlab,因此我着手对其进行矢量化处理以加快速度。
最终,我得到了一个完全矢量化的解决方案,该解决方案获得了相同的答案(所以它是正确的,或者至少与我的最初解决方案一样正确),但是运行需要274秒,几乎快了一半!
这是我第一次遇到Matlab代码,该代码的矢量化运行速度比迭代运行的速度慢。是否有任何经验法则或最佳实践来确定何时/可能发生?
我希望分享代码以获得一些反馈,但这是针对当前正在开放的学校作业,因此我现在真的不能。如果它最终成为“哇,那很奇怪,您可能做错了一些事情”之一,那么我可能会在一两周内再次进行检查,以查看我的矢量化处理是否成功。
回答:
Matlab中的向量化通常意味着分配更多的内存(制作更大的数组以避免循环,例如,用
tony的技巧 )。在最新版本中,通过改进的JIT循环编译,您的向量化解决方案所需的内存分配可能意味着没有优势,但是却看不到代码,这很难说。 Matlab具有出色的逐行分析器,可以帮助您了解矢量化版本的哪些特定部分正在花费时间。
更多&回答...