我读到numpy在四舍五入方面没有偏见,并且它的工作方式与其设计方式相同。那就是“如果您总是将0.5舍入到下一个最大数字,那么一堆舍入数字的平均值可能会比未舍入数字的平均值稍大:这种偏差或漂移可能会对某些数值算法产生非常不利的影响,使它们不准确。”
忽略此信息并假设我总是想四舍五入,如何在numpy中做到这一点?假设我的数组可能很大。
为了简单起见,假设我有数组:
import numpy as np A = [ [10, 15, 30], [25, 134, 41], [134, 413, 51]] A = np.array(A, dtype=np.int16) decimal = A * .1 whole = np.round(decimal)
小数看起来像:
[[ 1. 1.5 3. ] [ 2.5 13.4 4.1] [ 13.4 41.3 5.1]]
整体看起来像:
[[ 1. 2. 3.] [ 2. 13. 4.] [ 13. 41. 5.]]
如您所见,将1.5舍入为2,将2.5舍入为2。我如何强制始终为XX.5获得舍入答案?我知道我可以遍历数组并使用python round(),但这肯定会慢得多。想知道是否有一种方法可以使用numpy函数
import numpy as np A = [ [1.0, 1.5, 3.0], [2.5, 13.4, 4.1], [13.4, 41.3, 5.1]] A = np.array(A) print(A) def rounder(x): if (x-int(x) >= 0.5): return np.ceil(x) else: return np.floor(x) rounder_vec = np.vectorize(rounder) whole = rounder_vec(A) print(whole)
另外,您也可以查看numpy.ceil,numpy.floor,numpy.trunc以获得其他舍入样式