一個裝飾我試圖向量化(同意,不是最有效的方式做到這一點,但我的問題是,而在裝飾用)以下功能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
編輯:重新啓動IPython後,輸出結果爲OK。
任何人都可以解釋爲什麼diff_if_bigger
結果得到了tansformed成np.int
數組即使第一個參數x是這裏的np.float
的阿雷,反而對什麼是在doc ????
現在,我想強制浮置輸出,所以我做了這個
@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狀態?
@seberg,不,你說廢話.. – 2013-02-20 19:57:44
看,你真的沒有回答具體的任何我的問題..你甚至試圖運行我發佈的代碼位?你看過矢量化幫助嗎? – 2013-02-21 02:07:07
對不起,但也許你應該給出更好的錯誤描述,這樣診斷有點困難。 1.你所有的例子實際上都有效(但裝飾者給出的類型不能)。你的第一個例子可能會失敗,如果你在輸入之前給了不同的輸入。 3.對已經被矢量化的函數的最後一個vectorize調用是沒有意義的,所以也許這是你不祥的「不起作用」。 – seberg 2013-02-21 02:51:26