Я хотел бы применить функцию f(x, y)
к пустому массиву a
формы (N,M,2)
, последняя ось которого (2) содержит переменные x
и y
для ввода в f
.
Пример.
a = np.array([[[1, 1],
[2, 1],
[3, 1]],
[[1, 2],
[2, 2],
[3, 2]],
[[1, 3],
[2, 3],
[3, 3]]])
def function_to_vectorize(x, y):
# the function body is totaly random and not important
if x>2 and y-x>0:
sum = 0
for i in range(y):
sum+=i
return sum
else:
sum = y
for i in range(x):
sum-=i
return sum
Я хотел бы применить function_to_vectorize
таким образом:
[[function_to_vectorize(element[0], element[1]) for element in vector] for vector in a]
#array([[ 1, 0, -2],
# [ 2, 1, -1],
# [ 3, 2, 3]])
Как я могу векторизовать эту функцию с помощью np.vectorize
?
С этой функцией результат np.vectorize
также будет ожидать 2 аргумента. «подпись» определяется функцией, а не массивом (-ами), который вы ожидаете предоставить.
In [184]: f = np.vectorize(function_to_vectorize)
In [185]: f(1,2)
Out[185]: array(2)
In [186]: a = np.array([[[1, 1],
...: [2, 1],
...: [3, 1]],
...:
...: [[1, 2],
...: [2, 2],
...: [3, 2]],
...:
...: [[1, 3],
...: [2, 3],
...: [3, 3]]])
Просто укажите 2 столбца a
:
In [187]: f(a[:,:,0],a[:,:,1])
Out[187]:
array([[ 1, 0, -2],
[ 2, 1, -1],
[ 3, 2, 0]])