【问题标题】:Increasing the performance of an iterating function with Numpy Python使用 Numpy Python 提高迭代函数的性能
【发布时间】:2021-06-11 14:23:15
【问题描述】:

有没有办法可以在纯 numpy 上运行下面的函数,所以我试图摆脱 for 循环。我正在尝试减少代码的运行时间。 Number_arrayValues 的每个元素相加并求和。每次迭代后,总和会附加到 Appending_list 上。 Number_array 在 0 到 100 之间生成 10000000 个整数。

代码:

import numpy as np
from numpy import random
Appending_list = []
Values = random.randint(100, size=(100000))
Number_array = random.randint(100, size=(1000))
for n in range(len(Values)):
    result = np.sum([Number_array + Values[n]])
    Appending_list.append(result)

性能:

【问题讨论】:

  • 您是否尝试过显而易见的方法,只计算np.sum(Number_array) 一次 并调整Values 中每个值的总和?
  • 那个循环也不是问题,几乎所有的工作都已经由 NumPy 完成了。
  • 我不明白和位的调整?我知道 for 循环并没有减慢它的速度,但那是因为 n 值的长度太小了。如果我增加 n 值的长度,它将开始对处理时间产生影响。我已经更新了代码,这可能是一个更好的例子
  • 嗯,所以你无法确定np.sum([Number_array + Values[n]])np.sum(Number_array)之间的区别?或者您的个人资料图片是否准确?
  • 哦,我明白你的意思了,但是如果值的 len 非常大,也会极大地影响性能。因为它遍历了一个 for 循环。

标签: python arrays numpy for-loop sum


【解决方案1】:

您的比较代码:

Appending_list = []
for n in range(len(Values)):
    result = np.sum([Number_array + Values[n]])
    Appending_list.append(result)

用不同的方式写总和:

Appending_list = []
for n in range(len(Values)):
    result = np.sum(Number_array) + Values[n] * len(Number_array)
    Appending_list.append(result)

这很容易矢量化:

Appending_list = np.sum(Number_array) + Values * len(Number_array)

【讨论】:

  • 当然会影响性能,但 for 循环会成为瓶颈。还是谢谢
  • 什么for循环?没有了。
  • 哦,没关系,我认为Appending_list 功能与result 相同。对此感到抱歉。
猜你喜欢
  • 1970-01-01
  • 2014-01-31
  • 2016-01-14
  • 1970-01-01
  • 2022-01-02
  • 2015-07-28
  • 1970-01-01
  • 2018-01-08
  • 2011-01-12
相关资源
最近更新 更多