如何有效地将仅一列的numpy数组四舍五入到最接近的0.5?

时间:2019-06-28 08:28:43

标签: python arrays numpy rounding

是否有一种有效的方法来仅舍入numpy数组的一列?即我希望数字可以四舍五入到最接近的0.5,可以用round(number * 2.0) / 2.0完成。

假设我有numpy数组tmp,我的目标是四舍五入。我尝试了以下操作:

  1. 对于四舍五入到小数点,我可以使用
tmp[:,2] = np.around(tmp[:,2],1)

但这不是我想要的。

  1. 我定义了一个函数并尝试沿轴应用:
def roundToHalf(number):
   return round(number * 2.0) / 2.0

tmp[:,2] = np.apply_along_axis(roundToHalf,0,tmp[:,2])

tmp[:,2] = roundToHalf(tmp[:,2])

这不起作用,因为出现错误:

*** TypeError: type numpy.ndarray doesn't define __round__ method

在最坏的情况下,我只会使用for循环。但我希望你们能帮助我找到一个更流畅的解决方案。

2 个答案:

答案 0 :(得分:1)

问题是您编写了处理单个数字而不是数组的函数。您可以使用numpy的around舍入整个数组。您的功能将是

import numpy as np
def roundToHalf(array):
   return np.around(array * 2.0) / 2.0

,如果您输入一个numpy数组,它应该可以工作。下面的例子

In [24]: roundToHalf(np.asarray([3.6,3.8,3.3,3.1]))
Out[24]: array([3.5, 4. , 3.5, 3. ])

答案 1 :(得分:0)

您可以将np.vectorize()应用于函数roundToHalf(),以使其适用于numpy数组

roundToHalf_vect = np.vectorize(roundToHalf)
tmp[:,2] = roundToHalf_vect(tmp[:,2])
相关问题