optimization - 什么时候不对 matlab 进行矢量化?

标签 optimization matlab

我正在处理一些处理大型(但不是很大)数据集的 matlab 代码:10,000 784 个元素向量(非稀疏),并计算有关存储在 10,000x10 稀疏矩阵中的信息。为了让代码正常工作,我迭代地做了一些比较棘手的部分,对 10k 项进行循环以处理它们,并对稀疏矩阵中的 10 项进行一些循环以进行清理。

我的流程最初需要 73 次迭代(因此,大约 730k 循环)来处理,并在大约 120 秒内运行。不错,但这是 matlab,所以我开始对其进行矢量化以加快速度。

最后我得到了一个完全矢量化的解决方案,它得到了相同的答案(所以它是正确的,或者至少与我的初始解决方案一样正确),但运行时间为 274 秒,速度几乎是原来的一半!

这是我第一次遇到矢量化运行速度比迭代运行速度慢的 matlab 代码。是否有任何经验法则或最佳实践来确定何时可能/可能?

我很乐意分享代码以获得一些反馈,但它是针对当前开放的学校作业,所以我现在真的不能。如果它最终成为其中之一,“哇,这很奇怪,你可能做错了什么”,我可能会在一两周内重新审视它,看看我的矢量化是否有问题。

最佳答案

Matlab 中的矢量化通常意味着分配更多的内存(制作更大的数组以避免循环,例如 tony's trick)。随着最近版本中改进的循环 JIT 编译——您的矢量化解决方案所需的内存分配可能意味着没有优势,但如果没有看到代码,就很难说了。 Matlab 有一个出色的逐行分析器,可以帮助您了解矢量化版本的哪些特定部分占用了时间。

关于optimization - 什么时候不对 matlab 进行矢量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777425/

相关文章:

matlab - 查找一个数组中不在另一个数组中的元素

linux - 如何为当前工作目录起别名

string - String.Compare 的替代品以提高性能

performance - If/Else,先测试真还是假

optimization - 关于开销的 HTTP 与 Websockets

oop - "No appropriate method"使用类定义对象调用新函数时产生错误

c++ - SIMULINK 模型的 C/C++ 包装器

sql - 通过对行进行排序来优化 MySQL

c# - 求解器基础优化 - 一维装箱

matlab - 如何在 MatLAB 上更快地制作此动画