是否有一种有效的方法来仅舍入numpy数组的一列?即我希望数字可以四舍五入到最接近的0.5,可以用round(number * 2.0) / 2.0
完成。
假设我有numpy数组tmp
,我的目标是四舍五入。我尝试了以下操作:
tmp[:,2] = np.around(tmp[:,2],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循环。但我希望你们能帮助我找到一个更流畅的解决方案。
答案 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])