RuntimeWarning 对大数据计算性能的警告有多昂贵
how expensive are RuntimeWarning warnings on performance for computation on big data
我有很多计算遇到这样的情况:
-divide by zero
-np.nan values in a column that I compute df['col'].quantile(0.5)
-np.nan values in groupby objects that are then used like grouped.agg('sum')
等等
我没有收到任何错误,但收到 RuntimeWarning
消息。现在,由于我的数据非常大,我想知道这些警告是否会导致性能下降,如果是的话,无论如何我都可以绕过它们。
示例:
lib/python2.7/site-packages/pandas/core/ops.py:87: RuntimeWarning: divide by zero encountered in true_divide
rtruediv=arith_method(lambda x, y: operator.truediv(y, x),
lib/python2.7/site-packages/pandas/core/ops.py:720: RuntimeWarning: invalid value encountered in greater_equal
lib/python2.7/site-packages/numpy/lib/function_base.py:3403: RuntimeWarning: Invalid value encountered in median
RuntimeWarning)
lib/python2.7/site-packages/numpy/lib/function_base.py:3386: RuntimeWarning: invalid value encountered in multiply
x2 = take(ap, indices_above, axis=axis) * weights_above
警告相当于几个简单的操作,包括散列以确定是否已经发出警告,是否应该多次发出警告,以及警告发生的位置。这些速度很快,但不是免费的。
无论实际是否打印警告,所有这些操作都会发生,这与用于确定发出警告的库是否应该警告您的启发式成本无关有点不对劲。
这里是刚打电话的价格明细warning.warn
In [4]: %timeit [warnings.warn("Hey You") for i in range(1000)]
ipython-script.py:257: UserWarning: Hey You # Notice this only was printed once
1000 loops, best of 3: 1.2 ms per loop
In [6]: %timeit [i + i for i in range(1000)]
10000 loops, best of 3: 53.4 µs per loop
因此 1 毫秒用于 1000 次警告操作。将其扩展到您执行的警告生成操作的数量 * 这些操作发生的次数,您就会知道它花费了多少时间。
这些警告是否会在计算日长的作业中花费您几分钟的计算时间?是的。但是一天五分钟就有答案会比一天就有答案更糟糕吗?应该不是。
我有很多计算遇到这样的情况:
-divide by zero
-np.nan values in a column that I compute df['col'].quantile(0.5)
-np.nan values in groupby objects that are then used like grouped.agg('sum')
等等
我没有收到任何错误,但收到 RuntimeWarning
消息。现在,由于我的数据非常大,我想知道这些警告是否会导致性能下降,如果是的话,无论如何我都可以绕过它们。
示例:
lib/python2.7/site-packages/pandas/core/ops.py:87: RuntimeWarning: divide by zero encountered in true_divide
rtruediv=arith_method(lambda x, y: operator.truediv(y, x),
lib/python2.7/site-packages/pandas/core/ops.py:720: RuntimeWarning: invalid value encountered in greater_equal
lib/python2.7/site-packages/numpy/lib/function_base.py:3403: RuntimeWarning: Invalid value encountered in median
RuntimeWarning)
lib/python2.7/site-packages/numpy/lib/function_base.py:3386: RuntimeWarning: invalid value encountered in multiply
x2 = take(ap, indices_above, axis=axis) * weights_above
警告相当于几个简单的操作,包括散列以确定是否已经发出警告,是否应该多次发出警告,以及警告发生的位置。这些速度很快,但不是免费的。
无论实际是否打印警告,所有这些操作都会发生,这与用于确定发出警告的库是否应该警告您的启发式成本无关有点不对劲。
这里是刚打电话的价格明细warning.warn
In [4]: %timeit [warnings.warn("Hey You") for i in range(1000)]
ipython-script.py:257: UserWarning: Hey You # Notice this only was printed once
1000 loops, best of 3: 1.2 ms per loop
In [6]: %timeit [i + i for i in range(1000)]
10000 loops, best of 3: 53.4 µs per loop
因此 1 毫秒用于 1000 次警告操作。将其扩展到您执行的警告生成操作的数量 * 这些操作发生的次数,您就会知道它花费了多少时间。
这些警告是否会在计算日长的作业中花费您几分钟的计算时间?是的。但是一天五分钟就有答案会比一天就有答案更糟糕吗?应该不是。