【问题标题】:What is the fastest method to check if two conditions are True?检查两个条件是否为真的最快方法是什么?
【发布时间】:2011-09-12 02:35:07
【问题描述】:

对于大型数组,检查多个条件是同时为真还是同时为假的最快方法是什么?运营商的选择有影响吗?为什么或者为什么不?这是一个虚拟示例:

import numpy
a = numpy.ones((1000000,))
b = numpy.zeros((1000000,))

#c = (a == 1) * (b == 0)
#c = (a == 1) & (b == 0)
# other faster method of getting c?

通知编辑...

【问题讨论】:

  • 注意编辑,只是为了清楚两个数组的条件并不总是相同...
  • 这个优化重要吗?您是否分析过您的代码并发现这部分太慢了?

标签: python numpy logical-operators


【解决方案1】:

我不太确定这是否会影响速度,但在这种情况下,您可以通过使用就地操作来节省内存。

尝试类似:

c = a == 1
c &= b == 0 # (Or *=)

这应该需要更少的数组临时副本并使用更少的内存。

【讨论】:

  • 据我所知,在任何正常情况下都不应该有显着差异。我的快速而肮脏的分析似乎同意。
【解决方案2】:

您可以利用Short-circuiting of 运算符。而且这种短路对于不同运营商的不同情况也是不同的。

【讨论】:

  • 在 numpy 数组的情况下,这没有帮助。结果是另一个相同长度的数组。没有什么可以短路的。
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 2023-03-16
  • 2023-01-18
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
相关资源
最近更新 更多