как получить вывод функции, когда вход представляет собой список - PullRequest
0 голосов
/ 01 февраля 2019

Представьте, что у меня есть функция, подобная приведенной ниже:

f = (s**2 + 2*s + 5) + 1  

где s - это:

s = [1 , 2 , 3]

Как передать s в мою функцию?

Iзнаю, что я могу определить функцию, как показано ниже:

def model(s):
    model = 1 + (s**2 + 2*s + 5)
    return model
fitted_2_dis = [model(value) for value in s]

print ("fitted_2_dis =", fitted_2_dis)

Чтобы получить:

fitted_2_dis = [9, 14, 21]

Я предпочитаю не использовать этот метод.Потому что моя настоящая функция очень большая с множеством выражений.Итак, вместо того, чтобы занести все выражения в мой код, я определил свою функцию следующим образом:

sum_f = sum (f)

Sum_f in my code is the summation of bunches of expressions.

Есть ли другой способ оценки моей функции (sum_f), когда входные данные являются массивом?Спасибо

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Карта Функция отлично справится с задачей:

>>> map(model, s)
[9, 14, 21]
0 голосов
/ 01 февраля 2019

Вы можете попробовать это:

import numpy as np


def sum_array(f):
    np_s = np.array(f)
    return (np_s**2 + 2*np_s + 5) + 1

s = [1, 2, 3]
sum_f = sum_array(s)
0 голосов
/ 01 февраля 2019

Метод понимания списка - отличный метод.Кроме того, вы также можете использовать map:

fitted_2_dis = list(map(model, s))

Если вы фанат numpy, вы можете использовать np.vectorize:

np.vectorize(model)(s)

Наконец, если вы конвертируете свой массив вnumpy ndarray Вы передаете его напрямую:

import numpy as np

s = np.array(s)
model(s)
...