я попытался векторизации (согласованный, не самый эффективный способ сделать это, но мой вопрос скорее об использовании декоратор) следующая функцияNumpy векторизовать как декоратор с аргументами
@np.vectorize
def diff_if_bigger(x, y):
return y - x if y > x else 0
x = np.array([5.6, 7.0])
y = 8
diff_if_bigger(x, y)
# outputs array([2, 1]) which is not what I want
EDIT: После перезапуска IPython выход был в порядке.
Может кто-нибудь объяснить, почему результат diff_if_bigger
получил tansformed в массив np.int
, даже если первый аргумент х в данном случае является Арай из np.float
, Вопреки тому, что в документе ????
Теперь я хочу, чтобы заставить выход поплавка, так что я сделал это
@np.vectorize('np.float')
def diff_if_bigger(x, y):
return y - x if y > x else 0
# Error !!
# TypeError: Object is not callable.
@np.vectorize(otypes='np.float')
def diff_if_bigger(x, y):
return y - x if y > x else 0
# Again error !!
# TypeError: __init__() takes at least 2 arguments (2 given)
@np.vectorize(otypes=[np.float])
def diff_if_bigger(x, y):
return y - x if y > x else 0
# Still an error !!
# TypeError: __init__() takes at least 2 arguments (2 given)
Кстати, даже этот
vec_diff = np.vectorize(diff_if_bigger, otypes=[np.float])
не работает !!! Так, что происходит??
EDIT: Фактически последний работал после перезапуска IPython.
Таким образом, после моих предыдущих двух правок, мой вопрос теперь в два раза:
1- Как я могу использовать np.vectorize как декоратор с аргументами?
2- Как я могу очистить состояние IPython?
@seberg, нет, вы говорите глупости. –
Посмотрите, вы действительно не отвечаете конкретно ни на один из моих вопросов. Вы даже пытались запустить код, который я разместил? Вы посмотрели на помощь векторизации? –
Извините, но, возможно, вам следует дать более подробные описания ошибок, это немного сложно диагностировать. 1. На самом деле все ваши примеры работают (но у декораторов есть тип, который не может). 2. Ваш первый пример может потерпеть неудачу, если вы представили другой ввод перед этим вводом. 3. Последний вызов векторизации на функцию, которая уже векторизована, не имеет смысла, так что, возможно, это ваша зловещая «не работает». – seberg