我有一个函数,我想应用于线性空间的笛卡尔积的每个元素。我知道如何使用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)
由于我的功能很复杂且空间很大,我正在寻找一种有效/可扩展的方式。