如何在Python / Numpy中有效地将函数应用于笛卡尔积?

时间:2018-05-02 01:17:47

标签: arrays python-3.x numpy lambda itertools

我有一个函数,我想应用于线性空间的笛卡尔积的每个元素。我知道如何使用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)

由于我的功能很复杂且空间很大,我正在寻找一种有效/可扩展的方式。

0 个答案:

没有答案