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])