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

Python 如何有效地将numpy数组的一列舍入到最接近的0.5?,python,arrays,numpy,rounding,Python,Arrays,Numpy,Rounding,是否有一种有效的方法可以只对numpy数组的一列进行舍入?也就是说,我希望将数字四舍五入到最接近的0.5,这可以通过四舍五入(number*2.0)/2.0实现 假设我有numpy数组tmp,我的目标是将第三列四舍五入。我试过以下几件事: 如果只是四舍五入到某个小数点,我可以使用 tmp[:,2]=np.around(tmp[:,2],1) 但那不是我想要的 我定义了一个函数并尝试沿轴应用: def roundToHalf(数字): 返回轮(数字*2.0)/2.0 tmp[:,2]=np。沿_

是否有一种有效的方法可以只对numpy数组的一列进行舍入?也就是说,我希望将数字四舍五入到最接近的0.5,这可以通过
四舍五入(number*2.0)/2.0
实现

假设我有numpy数组
tmp
,我的目标是将第三列四舍五入。我试过以下几件事:

  • 如果只是四舍五入到某个小数点,我可以使用
  • tmp[:,2]=np.around(tmp[:,2],1)
    
    但那不是我想要的

  • 我定义了一个函数并尝试沿轴应用:
  • def roundToHalf(数字):
    返回轮(数字*2.0)/2.0
    tmp[:,2]=np。沿_轴应用_(圆对半,0,tmp[:,2])
    

    tmp[:,2]=roundToHalf(tmp[:,2])
    
    这不起作用,因为我收到一个错误:

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

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

    你们可以在你们的函数
    roundToHalf()
    上应用
    np.vectorize()
    ,这样它就可以在numpy数组上应用了

    roundToHalf\u vect=np.矢量化(roundToHalf)
    tmp[:,2]=四舍五入向量(tmp[:,2])
    
    问题在于,您编写函数是为了处理单个数字,而不是数组。可以使用numpy对整个数组进行取整。你的功能就是

    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. ])
    

    与其在
    roundToHalf
    中内置
    round
    ,不如
    np.around(number*2.0)/2.0
    ?这对我很有用
    np.around(number*2.0)/2.0