Как передать meshgrid в качестве аргумента функции, которая допускает массив только в python - PullRequest
0 голосов
/ 08 апреля 2020

Я программирую на python и хочу построить функцию, определенную как «objFun (inputPoint, параметр2, параметр3)» с тремя аргументами, где первый аргумент - это точка (массив numpy из 2 элементов или координаты), при котором вычисляется значение функции. Мой подход -

x = np.linspace(-10,10,50)
y = np.linspace(-10,10,50)
X,Y = np.meshgrid(x,y)

Однако я не знаю, как передать X и Y в качестве аргументов objFun, так как он принимает одномерный массив переменных. Я не могу изменить функцию, чтобы принять и X и Y в качестве аргументов. Пример objFun следующий:

def objFun (x, alpha, beta):
   if alpha > 0 :
        return x[0]^2+x[1]^2
   else if beta > 0 :
        return x[0] + x[1]
   else:
        return 0

Я хочу накормить меня sh точками X, Y на x [0] и x [1].

1 Ответ

0 голосов
/ 08 апреля 2020

Обновление : Ответ теперь включает пример функции OP и показывает, как передавать значения аргументов ключевых слов.


Вы можете комбинировать map() и zip(), используя lambda построение функции для получения значений параметров:

import numpy as np

def objFun (x, alpha, beta):
    """example function by OP without default parameter values"""
    if alpha > 0:
        return x[0]**2 + x[1]**2
    elif beta > 0:
        return x[0] + x[1]
    else:
        return 0

x = np.linspace(-10, 10, 3) # numbers reduced to 3
y = np.linspace(-10, 10, 3) # for convenience
X,Y = np.meshgrid(x,y)

for i in map(lambda x: objFun(x, alpha=1, beta=1), zip(X.flatten(), Y.flatten())):
    print(i) # just for testing/demonstration

Вывод соответствует ожидаемому:

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