Вот грязное решение, основанное на просмотре массива без его структуры, взятии потолка, а затем преобразовании его обратно в структурированный массив.
# sample array
arr = np.array([(1.4,2.3), (3.2,4.1)], dtype = [("x", "<f8"), ("y", "<f8")])
# remove struct and take the ceiling
arr1 = np.ceil(arr.view((float, len(arr.dtype.names))))
# coerce it back into the struct
arr = np.array(list(tuple(t) for t in arr1), dtype = arr.dtype)
# kill the intermediate copy
del arr1
и здесь он как нечитаемый однострочный, но без назначения промежуточной копии arr1
arr = np.array(
list(tuple(t) for t in np.ceil(arr.view((float, len(arr.dtype.names))))),
dtype = arr.dtype
)
# array([(2., 3.), (4., 5.)], dtype=[('x', '<f8'), ('y', '<f8')])
Я не утверждаю, что это отличное решение, но оно должно помочь вам продолжить работу над проектом, пока не будет предложено что-то лучшее