Как эффективно применить функцию к декартовому произведению в Python / Numpy? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть функция, которую я хотел бы применить к каждому элементу декартового произведения линейного пространства. Я знаю, как это сделать с функциями одной переменной, которая определяется с помощью lambda, а именно с использованием map. Вот пример:

import numpy as np
xpts = np.linspace(0, 1, 5)
fun = lambda p: p**2
arr = np.array(list(map(fun , xpts)))

Но с многомерной функцией мне не удалось использовать функцию map. Вот пример того, что я делаю вместо этого, что медленно:

def fun(x,y):
    return 2*x+y

xpts = np.linspace(0, 1, 5)

# make dict of indexes
count=0
dic=dict()
for j in xpts:
    dic[j]=count
    count+=1

# preallocate array
arr = np.empty([len(xpts)]*2)

for tup in itertools.product(xpts, xpts):

    ind1 = dic[tup[0]]
    ind2 = dic[tup[1]]

    val1 = tup[0]
    val2 = tup[1]

    arr[ind1, ind2]   = fun(val1, val2)

Поскольку моя функция сложна, а пространство велико, я ищу эффективный / масштабируемый способ.

...