применение массива функций к массиву элементов по позиции - PullRequest
0 голосов
/ 19 ноября 2018

Допустим следующее:

def x2(x):
    res=x*x
    return res

def tx(x):
    res=2*x
    return res

def x3(x):
    res=x*x*x
    return res

x=np.array([1,2,3])
f=np.array([x2,tx,x3])

Я пытаюсь вернуть массив, который является массивом ([x2 (1), tx (2), x3 (3)]) без использования цикла for.Возможно ли это в Python?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Нет объективной причины делать это, но вы можете сделать это так:

@np.vectorize
def apply(f,x) : return  f(x)

Тогда apply(f,x) сейчас [1,4,27]

0 голосов
/ 19 ноября 2018

Нет, в общем случае петля for уровня Python неизбежна.

Но вы можете спрятать его за map + lambda:

res1 = list(map(lambda x: x[0](x[1]), zip((x2, tx, x3), x)))
res2 = np.array([x2(1), tx(2), x3(3)])

assert np.array_equal(res1, res2)

Конечно, в этой ситуации рекомендуется составить список:

res = [func(var) for func, var in zip((x2, tx, x3), x)]
...