簡體   English   中英

對 python function 具有相同參數的多次調用輸出不同的返回值

[英]mutiple calls with same args to python function outputs different return values

從我的角度來看,這一定是一個非常基本的誤解。 我有一個 function 根據隨機值返回插值 function。

fct = create_interp_fct(x,y)

現在fct是一個可調用的插值 function。 例如:

fct([0,0,0,0,0,0])

返回

array([[ 0.75894378,  0.72761319, -0.23003647, -0.34790905, -0.51531125,
        -0.91211147]])

function大致定義如下:

def create_interp_fct(x,y):
    u,v = compute_some_random_values(x,y)
    return RegularGridInterpolator(u,v) #from from scipy.interpolate

問題是,如果我再次調用fct([0,0,0,0,0,0]) ,我會得到不同的 output。 因此很明顯,function 是根據新的隨機值重新定義的。 我的問題是:我如何使用fct以便每次調用它時都不會重新定義它? 想象一下fct的計算非常昂貴,但不能稱之為。 如何“保存”我當前計算的 function? 或者查看 scikit 中的所有機器學習內容(例如線性回歸等)。 如果我打電話

 lr = lm.LinearRegression() # import sklearn.linear_model as lm
 lr.fit(M,n)

你不能說我每次調用 lr.score(M,n) 時都會重新計算線性回歸?

以下示例中未復制來自給定fct實例的非確定性 output 問題:

In [13]: paste                                                                                                                                                                      

import numpy
from scipy.interpolate import RegularGridInterpolator                                                                                                                      

def compute_some_random_values(shape):
    return [numpy.arange(extent) for extent in shape], numpy.random.uniform(0, 1, size=shape)

def create_interp_fct(shape):
    u,v = compute_some_random_values(shape)
    return RegularGridInterpolator(u,v) #from from scipy.interpolate

## -- End pasted text --


In [24]: fct = create_interp_fct([2,3,4,5,6,7])                                                                                                                                     

In [25]: fct([0,0,0,0,0,0])                                                                                                                                                         
Out[25]: array([0.24572906])

In [26]: fct([0,0,0,0,0,0])                                                                                                                                                         
Out[26]: array([0.24572906])

In [27]: fct([0,0,0,0,0,0])                                                                                                                                                         
Out[27]: array([0.24572906])

In [28]: fct([0,0,0,0,0,0])                                                                                                                                                         
Out[28]: array([0.24572906])

我懷疑,在你的程序邏輯的某個地方,你已經在調用之間刷新了fct ,通過再次調用fct = create_interp_fct(...)而沒有意識到它。 這自然會重新隨機化事物。

暫無
暫無

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

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