Numpy Broadcasting для пользовательских функций - PullRequest
0 голосов
/ 21 сентября 2018

В numpy, если a является ndarray, то что-то вроде np.sin(a) принимает sin всех записей ndarray.Что если мне нужно определить свою собственную функцию (для глупого примера, f(x) = sin(x) if x<1 else cos(x)) с широковещательным поведением?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Использование np.where:

np.where(a<1,np.cos(a), np.sin(a))

Пример:

a = [-1,1,2,-2]

>>> np.where(a<1,np.cos(a), np.sin(a))
array([-0.84147098,  0.84147098,  0.90929743, -0.90929743])

Если у вас более одного условия, используйте np.select

0 голосов
/ 21 сентября 2018

Вы можете определить свою собственную функцию f = lambda x: sin(x) if x<1 else cos(x), а затем использовать встроенный векторизатор numpy f_broadcasting = np.vectorize(f).

Это не дает никаких улучшений скорости (а дополнительные издержки могут замедлить небольшие проблемы), но этодает желаемое поведение при вещании.

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