私は次の関数をベクトル化しようとしました(同意しました、それを行うための最も効率的な方法ではありませんが、私の質問はデコレータの使用にあります)
@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
編集:IPythonを再起動した後、出力はOKでした。
最初の引数xがここにあるとしても、ドキュメントの内容とは逆に、結果がdiff_if_bigger
配列に変換された理由を誰かが説明できますか????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])
動作しません!!! どうしたの??
編集:実際、後者はIPythonを再起動した後に機能しました。
したがって、前の2つの編集の後、私の質問は2つになりました。
1-引数付きのデコレータとしてnp.vectorizeを使用するにはどうすればよいですか?
2-どうすればIPythonの状態をクリーンアップできますか?