Python 基于行数的NumPY地板或天花板

Python 基于行数的NumPY地板或天花板,python,numpy,Python,Numpy,我有这样一个数组: >>> arr array([[1, 2, 2.5], [3, 4, 3.75], [5, 6, 1.25], [7, 8, 1.3], [9, 0, 3.5]]) 我希望根据行号对第三列执行math.floor或math.ceil操作。因此,如果行号为奇数,则执行ceil操作;如果行号为偶数,则执行floor操作。像这样: >>> func(arr) array([[1, 2

我有这样一个数组:

>>> arr
array([[1, 2,  2.5],
       [3, 4, 3.75],
       [5, 6, 1.25],
       [7, 8,  1.3],
       [9, 0,  3.5]])
我希望根据行号对第三列执行
math.floor
math.ceil
操作。因此,如果行号为奇数,则执行
ceil
操作;如果行号为偶数,则执行
floor
操作。像这样:

>>> func(arr)
array([[1, 2, 3],
       [3, 4, 3],
       [5, 6, 2],
       [7, 8, 1],
       [9, 0, 4]])

我该怎么做呢?

您可以使用
np.where
,而且,
np.floor
,而不是
math.floor
,允许您在numpy阵列上操作

mask = np.arange(len(arr))%2

arr[:,-1] = np.where(mask, np.floor(arr[:,-1]), np.ceil(arr[:,-1]))

# if you want to apply to all array, use
# np.where(mask[:,None], np.floor(arr), np.ceil(arr))
输出:

array([[1., 2., 3.],
       [3., 4., 3.],
       [5., 6., 2.],
       [7., 8., 1.],
       [9., 0., 4.]])
用切片法-

arr[::2,2] = np.ceil(arr[::2,2])
arr[1::2,2] = np.floor(arr[1::2,2])