Векторизовать функцию в трехмерном массиве numpy, используя определенную подпись

Я хотел бы применить функцию 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?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С этой функцией результат 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]])

Другие вопросы по теме