有什么方法可以自定义numpy.rint函数吗?

时间:2020-07-15 10:09:45

标签: python arrays numpy rounding

我有一个numpy数组

a = np.array([[[0.23,0.81],[0.9,0],[1,0.51]], [[0.3,0.75],[0.1,0.2],[1,0.50]]])

要将其舍入为整数,有一个函数numpy.rint。

a_round = np.rint(a)

值大于0.5时向上舍入,值小于0.5时向下舍入。所以我的输出是:

[[[0。 1.] [1。 0.] [1。 1。]]

[[0。 1.] [0。 0.] [1。 0。]]]

问题是,有什么办法可以自定义汇总逻辑?例如,如果我想在该值大于.3时向上取整,而在该值小于0.3时向下取整?

2 个答案:

答案 0 :(得分:2)

您可以使用where()来做到这一点:

>> a = np.array([[[0.23,0.81],[0.9,0],[1,0.51]], [[0.3,0.75],[0.1,0.2],[1,0.50]]])
array([[[0.23, 0.81],
        [0.9 , 0.  ],
        [1.  , 0.51]],

       [[0.3 , 0.75],
        [0.1 , 0.2 ],
        [1.  , 0.5 ]]])

>> np.rint(a)
array([[[0., 1.],
        [1., 0.],
        [1., 1.]],

       [[0., 1.],
        [0., 0.],
        [1., 0.]]])

>> np.where(a<0.3, np.floor(a), np.ceil(a))
array([[[0., 1.],
        [1., 0.],
        [1., 1.]],

       [[1., 1.],
        [0., 0.],
        [1., 1.]]])

答案 1 :(得分:0)

通过将布尔值转换为浮点数,还有一种简单的方法可以对[0,1]范围内的数字进行处理:

>> (a>=0.3).astype(np.float)

array([[[0., 1.],
        [1., 0.],
        [1., 1.]],

       [[1., 1.],
        [0., 0.],
        [1., 1.]]])