Допустим, у нас есть особенно простая функция, такая как
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. Тем не менее, этот метод оказался не очень эффективным. Может ли кто-нибудь придумать более надежный способ передачи любой функции в целом на множество массивов?
Если переписывание кода в стиле, удобном для массивов, является единственным способом, было бы полезно, если бы вы могли упомянуть об этом и здесь.