将矩阵中的十进制值四舍五入为最接近的整数

Rounding decimal values to nearest integers in a matrix

np.aroundnp.rintnp.round都偏向于偶数,例如2.5变成2,3.5变成4。

我想对小数数组进行四舍五入,以便四舍五入始终如一。就像任何 >=x.5 的东西都是 x+1 并且 任何小于 我可以用这种逻辑编写代码,但是有没有很酷又简短的 pythonic 方法来做到这一点?

例如,np.unique(MyArray)看起来:

[0.         0.08333334 0.125      0.16666667 0.25       0.33333334
 0.375      0.41666666 0.5        0.58333331 0.625      0.66666669
 0.75       0.83333331 0.875      0.91666669 1.         1.08333337
 1.125      1.16666663 1.25       1.33333337 1.375      1.41666663
 1.5        1.58333337 1.625      1.66666663 1.75       1.83333337
 1.875      1.91666663 2.         2.08333325 2.125      2.16666675
 2.25       2.33333325 2.375      2.41666675 2.5        2.58333325
 2.625      2.66666675 2.75       2.83333325 2.875      2.91666675
 3.         3.08333325 3.125      3.16666675 3.25       3.33333325
 3.375      3.41666675 3.5        3.58333325 3.625      3.66666675
 3.75       3.83333325 3.875      3.91666675 4.         4.08333349
 4.125      4.16666651 4.25       4.33333349 4.375      4.41666651
 4.5        4.58333349 4.625      4.66666651 4.75       4.83333349
 4.875      4.91666651 5.         5.08333349 5.125      5.16666651
 5.25       5.33333349 5.375      5.41666651 5.5        5.58333349
 5.625      5.66666651 5.75       5.83333349 5.875      5.91666651
 6.         6.125      6.25       6.33333349 6.375      6.5
 6.625      6.75       6.83333349 6.875      7.         7.16666651
 7.25       7.33333349 7.375      7.58333349 7.66666651 8.        ]

@banikr,我认为你可以使用round内置函数。

Here你可以看看。

IIUC,可以使用np.where:

m = np.linspace(1, 10, 13)
a = np.where(m - m.astype(int) >=  0.5, np.ceil(m), np.floor(m))

输出:

>>> m
array([ 1.  ,  1.75,  2.5 ,  3.25,  4.  ,  4.75,  5.5 ,  6.25,  7.  ,
        7.75,  8.5 ,  9.25, 10.  ])

>>> a
array([ 1.,  2.,  3.,  3.,  4.,  5.,  6.,  6.,  7.,  8.,  9.,  9., 10.])