【发布时间】:2011-05-12 03:23:11
【问题描述】:
在我的代码中,我有一个 for 循环,该循环对多维 numpy 数组进行索引,并使用每次迭代获得的子数组进行一些操作。看起来是这样的
for sub in Arr:
#do stuff using sub
现在使用sub 完成的工作是完全矢量化的,所以它应该是高效的。另一方面,这个循环迭代了大约~10^5 次并且是瓶颈。你认为我会通过将这部分卸载到 C 来获得改进吗?我有点不愿意这样做,因为 do stuff using sub 使用广播、切片、智能索引技巧,用普通 C 编写会很乏味。我也欢迎关于在将计算卸载到 C 时如何处理广播、切片、智能索引的想法和建议。
【问题讨论】:
-
我不确定,但在我看来,您正在使用经过优化的流程来达到预期目的。我没有理由不使用它...
-
@soandos 你能详细说明一下吗?我不太了解您,尤其是您评论中的“它”指的是什么。
-
@san: for * in Arr 被设计成非常擅长遍历数组。看起来,人们应该使用它。我不知道它会产生多大的差异,老实说,因为 10^5 次并不是那么多(在标准的 1.66 ghz 计算机上,一个循环每秒可以通过超过 3.3 亿次交互)和所以一个更好的问题是:你怎样才能加快你的“做事”
-
你玩过 Cython 吗?它不会修复你的算法,但它会去除大量的 python 开销。
-
@san - 也许您甚至不必遍历数组。如果您通过
do stuff向我们展示更多详细信息,我们可以找到没有循环的更好解决方案。