我试图矢量化(同意,不是最有效的方法,但我的问题是关于装饰器的使用)以下函数
@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 后,输出正常。
任何人都可以解释为什么即使第一个参数 x 在这里是 aray of的结果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 后工作。
所以在我之前的两次编辑之后,我的问题现在是双重的:
1-如何使用 np.vectorize 作为带参数的装饰器?
2-如何清理 IPython 状态?