Создание лямбда-функции динамически - PullRequest
2 голосов
/ 26 мая 2019

Можно ли как-нибудь динамически создать лямбда-функцию? Например,

f = lambda t : (1 + 32*t + 23*np.power(t,2) + 23*np.power(t,3) + 23*np.power(t,4))

в вышеприведенной лямбда-функции f, я хочу увеличить значение t в 23*np.power(t,2) и увеличить его до 467. Итак:

f = lambda t : (1 + 32*t + 23*np.power(t,2) + .. + 23*np.power(t,467))

Есть ли способ, которым я мог бы сделать это автоматически?

Ответы [ 2 ]

3 голосов
/ 26 мая 2019

Возможно, вы что-то вроде f = lambda t : 1 + sum(23 * np.power(t, i) for i in range(1, 467)). Вы не можете использовать циклы или что-то в этом роде, но простые выражения, вызовы функций и т. Д. Вы можете

2 голосов
/ 26 мая 2019

Два параметра np.power транслируются друг против друга.

def foo(t, p):
    return 1+32*t + np.sum(23*np.power(t,np.arange(*p)[:,None]), axis=0)

Это записано для получения массива t и диапазона мощности:

In [445]: foo(np.linspace(0,1,11),(2,4))                                                              
Out[445]: 
array([ 1.   ,  4.453,  8.504, 13.291, 18.952, 25.625, 33.448, 42.559,
       53.096, 65.197, 79.   ])
In [446]: foo(np.linspace(0,1,11),(2,468))                                                            
Out[446]: 
array([1.00000000e+00, 4.45555556e+00, 8.55000000e+00, 1.35571429e+01,
       1.99333333e+01, 2.85000000e+01, 4.09000000e+01, 6.09666667e+01,
       1.00200000e+02, 2.16100000e+02, 1.07510000e+04])

Этоверсия дает звонящему больше контроля:

def foo(t, p, axis=0):
    return 1+32*t + np.sum(23*np.power(t,p), axis=axis)

например, массив 2d t (но вы должны хорошо понимать вещание):

In [449]: foo(np.linspace(0,1,10).reshape(2,5),np.arange(2,468)[:,None,None])                         
Out[449]: 
array([[1.00000000e+00, 4.87500000e+00, 9.57142857e+00, 1.55000000e+01,
        2.34000000e+01],
       [3.47500000e+01, 5.30000000e+01, 8.85000000e+01, 1.93000000e+02,
        1.07510000e+04]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...