Передача функции Python в массивы numpy

Допустим, у нас есть особенно простая функция, такая как

import scipy as sp
def func(x, y):
   return x + y

Эта функция, очевидно, работает для нескольких встроенных типов данных Python x и y , таких как строка, список, int, float, array и т. д. Поскольку нас особенно интересуют массивы, мы рассматриваем два массива:

x = sp.array([-2, -1, 0, 1, 2])
y = sp.array([-2, -1, 0, 1, 2])

xx = x[:, sp.newaxis]
yy = y[sp.newaxis, :]

>>> func(xx, yy)

это возвращает

array([[-4, -3, -2, -1,  0],
  [-3, -2, -1,  0,  1],
  [-2, -1,  0,  1,  2],
  [-1,  0,  1,  2,  3],
  [ 0,  1,  2,  3,  4]])

, как и следовало ожидать.

А что, если кто-то хочет использовать массивы в качестве входных данных для следующей функции?

def func2(x, y):
  if x > y:
     return x + y
  else:
     return x - y

do >>> func (xx, yy) вызовет ошибку.

Первый очевидный метод, который можно придумать, - это функция sp.vectorize в scipy / numpy. Тем не менее, этот метод оказался не очень эффективным. Может ли кто-нибудь придумать более надежный способ передачи любой функции в целом на множество массивов?

Если переписывание кода в стиле, удобном для массивов, является единственным способом, было бы полезно, если бы вы могли упомянуть об этом и здесь.

7
задан Nico Schlömer 22 March 2017 в 10:56
поделиться