У меня есть функция, которую я хотел бы применить к каждому элементу декартового произведения линейного пространства. Я знаю, как это сделать с функциями одной переменной, которая определяется с помощью 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)
Поскольку моя функция сложна, а пространство велико, я ищу эффективный / масштабируемый способ.