В 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]
Есть ли лучший способ?