Как применить np.ceil к структурированному массиву numpy - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь использовать функцию np.ceil в структурированном массиве numpy, но все, что я получаю, это сообщение об ошибке:

TypeError: ufunc 'ceil' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Вот простой пример того, как будет выглядеть этот массив:

arr = np.array([(1.4,2.3), (3.2,4.1)], dtype=[("x", "<f8"), ("y", "<f8")])

Когда я пытаюсь

np.ceil(arr)

, я получаю вышеупомянутую ошибку.Когда я просто использую один столбец, он работает:

In [77]: np.ceil(arr["x"])
Out[77]: array([ 2.,  4.])

Но мне нужно получить весь массив.Есть ли другой способ, кроме как переходить от столбца к столбцу или не использовать структурированные массивы вместе?

1 Ответ

0 голосов
/ 04 апреля 2019

Вот грязное решение, основанное на просмотре массива без его структуры, взятии потолка, а затем преобразовании его обратно в структурированный массив.

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

Я не утверждаю, что это отличное решение, но оно должно помочь вам продолжить работу над проектом, пока не будет предложено что-то лучшее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...