如何有效地将 numpy 数组的一列四舍五入到最接近的 0.5?
How to efficiently round only one column of numpy array to nearest 0.5?
是否有一种有效的方法可以只对 numpy 数组的一列进行舍入? IE。我希望数字四舍五入到最接近的 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 循环。不过还是希望大家能帮我找到一个更顺利的解决办法。
您可以在您的函数 roundToHalf()
上应用 np.vectorize()
,以便它适用于 numpy 数组
roundToHalf_vect = np.vectorize(roundToHalf)
tmp[:,2] = roundToHalf_vect(tmp[:,2])
问题是您编写的函数是处理单个数字,而不是数组。您可以使用 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. ])
是否有一种有效的方法可以只对 numpy 数组的一列进行舍入? IE。我希望数字四舍五入到最接近的 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 循环。不过还是希望大家能帮我找到一个更顺利的解决办法。
您可以在您的函数 roundToHalf()
上应用 np.vectorize()
,以便它适用于 numpy 数组
roundToHalf_vect = np.vectorize(roundToHalf)
tmp[:,2] = roundToHalf_vect(tmp[:,2])
问题是您编写的函数是处理单个数字,而不是数组。您可以使用 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. ])