我想在 Python 中創建一個數學可視化類,我可以在其中可視化優化演算法。這是我到目前為止:
class function_visualisation:
def objective1n1(x):
return x**5.0 - 2*x**4 - 0.5*x**3 4*x**2 - x
def objective2n1(x,y):
return x**5.0 - 2*y**4 - 15*x**3 4*y**2 - x
def __init__(self, input = 0):
self.fct_1 = self.objective1n1(x)
self.fct_2 = self.objective2n1(x,y)
現在我有 2 個多項式;第一個輸入一個,第二個輸入兩個。最終我希望這個類有幾個可調整的函式型別和繪圖方法。問題是當試圖實體化 Python 時說
self.fct_1 = self.objective1n1(x)
NameError: name 'x' is not defined
我能理解。
在各種帖子中,我看到人們使用一種直觀的技術來定義 numpy 函式;例如:
x = np.linspace(?4*np.pi,4*np.pi,50)
y = np.linspace(?4*np.pi,4*np.pi,50)
z = x**2 y**2
有沒有一種好方法可以獲得類似的東西,這樣我就不必提前給出函式引數?
編輯:謝謝你們兩個。
但正如我評論的那樣,當我初始化并插入一個具體值時
fcts = function_visualisation()
print(fcts.fct_1(5))
我得到
print(fcts.fct_1(5))
TypeError: objective1n1() takes 1 positional argument but 2 were given
我確實想要一個這樣的類的原因是將不同維度的不同繪圖方法打包在一起,并且可以輕松更改一個人所考慮的功能。那么我該如何解決呢?
uj5u.com熱心網友回復:
當你有一個函式時,比如
def objective1n1(x):
return x**5.0 - 2*x**4 - 0.5*x**3 4*x**2 - x
呼叫objective1n1(x)將在輸入處計算此函式x,因此x必須提前定義(就像在您的示例中使用np.linspace)。
如果您只想將函式物件分配給另一個變數,請使用:
self.fct_1 = self.objective1n1
之后,您可以在代碼中呼叫self.fct_1(x)任何x后面的內容。
uj5u.com熱心網友回復:
self.objective1n1(x)是函式的呼叫self.objective1n1。如果您只是想更改后面的函式,則self.fct_1需要
self.fct_1 = self.objective1n1
如果不需要自參考,可以使用@staticmethod裝飾器。但是,您可能首先要考慮不為此使用類。
uj5u.com熱心網友回復:
要結合的答案馬丁索瑪,米哈伊爾Genkin將和評論kindall:
呼叫objective1n1(x)將在輸入處計算此函式x,因此x必須提前定義(就像在示例中使用np.linspace)。
如果只想將函式物件分配給另一個變數,請使用:
self.fct_1 = self.objective1n1
為了能夠像這樣呼叫函式
fcts = function_visualisation()
print(fcts.fct_1(5))
必須用@staticmethod裝飾器定義它
@staticmethod
def objective1n1(x):
return x**5.0 - 2*x**4 - 0.5*x**3 4*x**2 - x
或self參考
def objective1n1(self,x):
return x**5.0 - 2*x**4 - 0.5*x**3 4*x**2 - x
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/351725.html
上一篇:按年份比較唯一客戶
下一篇:基于有效值的組合聚合
