如何有效地将 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 并且我的目标是将第三列四舍五入。有以下几种,我试过了:

  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 循环。不过还是希望大家能帮我找到一个更顺利的解决办法。

您可以在您的函数 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. ])