Пользовательская функция python нуждается в помощи, чтобы исправить ошибку - PullRequest
0 голосов
/ 06 апреля 2019

Я хотел бы написать функцию Python, как показано ниже:

import numpy as np
a = [[-0.17985, 0.178971],[-0.15312,0.226988]] 
(lambda x: x if x > 0 else np.exp(x)-1)(a)

Ниже приведено сообщение об ошибке Python:

TypeError                                 Traceback (most recent call last)
<ipython-input-8-78cecdd2fe9f> in <module>
----> 1 (lambda x: x if x > 0 else np.exp(x)-1)(a)

<ipython-input-8-78cecdd2fe9f> in <lambda>(x)
----> 1 (lambda x: x if x > 0 else np.exp(x)-1)(a)

TypeError: '>' not supported between instances of 'list' and 'int'

Как мне решить эту проблему?

Например:

a = [[-0.17985, 0.178971],[-0.15312,0.226988]]

b = f(a) 

ожидаемый результат

b = [[-0.1646, 0.17897],[-0.14197, 0.22699]]

1 Ответ

0 голосов
/ 06 апреля 2019

У вас есть список списков, поэтому требуется дополнительная итерация:

import numpy as np

a = [[-0.17985, 0.178971],[-0.15312,0.226988]]

f = lambda x: x if x > 0 else np.exp(x)-1

res = []
for x in a:
    lst = []
    for y in x:
        lst.append(f(y))
    res.append(lst)

print(res)
# [[-0.16460448865975663, 0.17897099999999999], [-0.14197324757693675, 0.226988]]

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

[[x if x > 0 else np.exp(x)-1 for x in y] for y in a]

Или с определенным lambda:

[[f(x) for x in y] for y in a]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...