你的問題沒有說清楚正是你想什麼輸出從量化的功能看,但我會假設你想在同一目錄(A)採用作爲參數到f的每次調用( )(例如,對於X數組中的每個元素一次)
函數的矢量化版本確保所有參數都是數組,然後應用numpy's broadcasting rules來確定如何組合這些參數。
與np.array的np.ndarray包裝一樣,通過自動將列表轉換爲包含相同元素的數組,而不是使用dtype = object創建數組,該數組的參數強制嘗試有幫助。包含該列表作爲其唯一元素。這其中大部分的時間是我們所希望的,但在你的情況下,這種「聰明」的行爲是回來咬你。
雖然可能有指示numpy的只有一種方式對待某些輸入向量,有兩種簡單的方式來獲得你後的行爲:
- 手動創建一個array with dtype=object在廣播內工作規則
- Curry矢量化功能
1 = D型對象
之前的值
numpy的陣列獲得它們的效率從僅將存儲一種類型的項目,但它們仍然可以通過指定所存儲的數據類型是蟒對象包含任意Python對象:
list_obj_array = np.ndarray((1,), dtype=object)
list_obj_array[0] = [1,2,3]
f2(X,list_obj_array) # using your definition from above
打印:
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
返回:
array([ 6. , 5.4 , 4.90909091, 4.5 , 4.15384615,
3.85714286, 3.6 , 3.375 , 3.17647059, 3. ])
2。
def curry_f(A):
def f_curried(x):
return f(x, A) # using your definition from above
return f_curried
f2 = np.vectorize(curry_f(P))
f2(X)
打印:鑽營
因爲你是通過相同的列表來調用函數的每個項目在數組中,你可以直接與功能應用矢量之前討好存儲列表
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
type(A)=<type 'list'>, A=[1, 2, 3]
和回報:
array([ 6. , 5.4 , 4.90909091, 4.5 , 4.15384615,
3.85714286, 3.6 , 3.375 , 3.17647059, 3. ])
P.S.你也可以看看np.frompyfunc - 它與vectorize()類似,但是它的工作方式稍低一些。