簡體   English   中英

在函數內使用 np.vectorize 時出錯

[英]Error using np.vectorize inside a function

我正在嘗試創建一個名為 function2 的函數來向量化一個函數,當我只創建一個函數時它可以工作,但是如果嘗試將它包裝在另一個函數中,我不會得到我需要的結果

此代碼有效

A= np.array([1])
B= np.array([2])

def function1(a, b):
    if a > b:
        return a - b
    else:
        return a + b
function1 = np.vectorize(function1)

function1(A, B)

out array([3])

但是這個沒有,我不知道為什么,我希望得到與上面的代碼相同的結果 array([3])

def function1(a, b):
    if a > b:
        return a - b
    else:
        return a + b

def function2(a, b):
    function2 = np.vectorize(function1)
    return function2

function2(A, B)

out <numpy.vectorize at 0x24f0a22eba8>

我在這里先向您的幫助表示感謝

那是因為在第二種情況下,您不是在調用函數,而是在返回函數對象。 np.vectorise返回函數對象但不調用它。

將您的代碼更改為 -


def function3(a, b):
    function2 = np.vectorize(function1)
    return function2(a,b) #call here

function3(A,B)

現在應該工作。

  • 在第一種情況下,function2 是向量化的函數對象本身,將 (A,B) 參數傳遞給它會調用它。

  • 在第二種情況下,function2 是一個參數函數,但它不使用參數 a,b,而是簡單地返回一個函數對象。 因此,當您使用參數調用它時,它會覆蓋 function2 並每次都返回一個向量化的函數對象,完全忽略所有參數。

  • 在第三種情況下(我的解決方案),您正在調用 function3,它采用 A、B 參數並首先對 function1 進行矢量化。 接下來,它使用傳遞的參數調用這個向量化函數並返回輸出。

按照函數調用和函數中的順序代碼行,就會非常清楚為什么會發生這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM