Определить обратные вызовы для numpy структурированного массива - PullRequest
1 голос
/ 27 февраля 2020

Допустим, у меня есть структурированный массив в numpy, который выглядит следующим образом:

myType = np.dtype([('label', 'U16'), ('value', np.float32), ('max_value', np.float32)])

arr = np.array([ [ ('a', 1., 10.), ('b', 2., 10.) ]
               , [ ('c', 3., 10.), ('d', 4., 10.) ]], dtype=myType )

Я могу индексировать каждый атрибут структуры, используя обычный синтаксис скобок, например

>>> arr['value'] 
array([[1., 2.],
       [3., 4.]], dtype=float32)

Предположим, я бы хотел получить соотношение value / max_value. Этого легко достичь, используя обычную функцию

>>> percentage = lambda arr: arr['value'] / arr['max_value']
>>> percentage(arr)
array([[0.1, 0.2],
       [0.3, 0.4]], dtype=float32)

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

>> arr['percentage'] # Execute the percentage function
array([[0.1, 0.2],
       [0.3, 0.4]], dtype=float32)

Причиной использования обратного вызова является сохранение согласованного состояния, поэтому, если вы измените value, атрибут percentage сохранит согласованность.

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