сделать скаляр python функция принимать список и массивы - PullRequest
2 голосов
/ 15 апреля 2020

В python существует ли простой и эффективный способ заставить функцию f(x: float) принимать оба списка и numpy массива в качестве аргументов (в этом случае я хотел бы применить f поэлементно и вернуть результат в том же формате, в котором был отправлен)? Пока мне нужны только одномерные массивы.

В качестве иллюстрации (мой настоящий f более сложный), скажем, что у меня есть:

def f(x):
    return math.log(x) if x > 0 else 0.0

Тогда этот работает , но не так уж и элегантно - и, возможно, не настолько эффективно из-за рекурсии (которую я использую, поскольку она позволяет мне иметь только одну функцию):

def f(x):
    if np.isscalar(x):
        return math.log(x) if x > 0 else 0.0
    elif isinstance(x, np.ndarray):
        return np.array([f(i) for i in x], dtype=float)
    else:
        return [f(i) for i in x]

Есть ли лучший способ?

...