【问题标题】:Numpy version of this particular list comprehension这个特定列表理解的 Numpy 版本
【发布时间】:2019-09-18 20:04:49
【问题描述】:

所以几天前我需要在这个线程中进行特定的列表理解:Selecting a subset of integers given two lists of end points

我得到了满意的答案。现在快进,我需要以某种方式提高性能,因为我正在处理的工作涉及循环它,并且在每次迭代中,这些端点数组的长度至少为几千。

所以我的问题是 numpy 包中是否有任何功能可以完成工作但速度更快?我查看了 numpy 的 linspace、repeat、arange 和其他东西,但找不到任何突破。如果有办法更快地完成工作,你们能给我指路吗?

提前谢谢你们。

【问题讨论】:

  • 请提供一个独立的问题,包含独立的示例代码和您已经尝试过的示例。
  • 好的,稍后我会再次询问并提供更好的演示文稿。感谢您的反馈
  • 你可以直接edit你的问题,这比以后再问要好。

标签: python list performance numpy list-comprehension


【解决方案1】:

如果您仍然对它感兴趣,您可以去掉一个 for 循环,并结合使用 numpy.arange() 与列表理解和 numpy.hstack() 来获得所需的内容。话虽如此,我们仍然需要至少一个 for 循环来完成这项工作(因为 rangearange 都不接受一系列端点)

t1 = [0,13,22]
t2 = [4,14,25]
np.hstack([np.arange(r[0], r[1]+1)  for r in zip(t1, t2)])

# outputs
array([ 0,  1,  2,  3,  4, 13, 14, 22, 23, 24, 25])

但是,我不知道这对于您的具体情况会有多高的性能。

【讨论】:

  • 感谢您的帮助,我会看看它改进了多少。
  • @mathguy 当然,请让我知道,如果可能的话,我可以改进我的答案:)
  • 奇怪,在我的电脑上,旧解决方案比新解决方案快。旧的每个循环需要 13.4 毫秒,新的每个循环需要 50.4 毫秒。我正在使用的 t1 和 t2 有 10,000 个条目而不是 3 个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 2022-06-16
  • 2016-10-20
相关资源
最近更新 更多