我還是新來的python,這可能會是這些(愚蠢)無聊的問題之一。但是,任何幫助將不勝感激。我正在編寫一些涉及很多變量的東西,並且我決定使用一個類來封裝所有變量(希望隨着時間的推移,它可以更容易地「讀取」),但它並不像我想的那樣工作。所以,這裏不再贅述是抓住要點的一部分。使用類來定義python中的多個變量
import numpy as np
class variable:
def __init__(self, length):
self.length = length # time length`
def state_dynamic(self):
length = self.length
return np.zeros((2, np.size(length)))
def state_static(self):
length = self.length
return np.zeros((2, np.size(length)))
def control_dynamic(self):
length = self.length
return np.zeros((2, np.size(length)))
def control_static(self):
length = self.length
return np.zeros((2, np.size(length)))
def scheduling(self):
length = self.length
return np.zeros(np.size(length))
def disturbance(self):
length = self.length
dummy = np.random.normal(0., 0.1, np.size(length))
for i in range(20):
dummy[i+40] = np.random.normal(0., 0.01) + 1.
dummy[80:100] = 0.
return dummy
我也試過這樣:
import numpy as np
class variable:
def __init__(self, type_1, type_2, length):
self.type_1 = type_1 # belongs to set {state, control, scheduling, disturbance}
self.type_2 = type_2 # belongs to set {static, dynamic, none}
self.length = length # time length
def type_v(self):
type_1 = self.type_1
type_2 = self.type_2
length = self.length
if type_1 == 'state' and type_2 == 'dynamic':
return np.zeros((2, np.size(length)))
elif type_1 == 'state' and type_2 == 'static':
return np.zeros((2, np.size(length)))
elif type_1 == 'control' and type_2 == 'dynamic':
return np.zeros((2, np.size(length)))
elif type_1 == 'control' and type_2 == 'static':
return np.zeros((2, np.size(length)))
elif type_1 == 'scheduling' and type_2 == 'none':
return np.zeros(np.size(length))
elif type_1 == 'disturbance' and type_2 == 'none':
dummy = np.random.normal(0., 0.1, np.size(length))
for i in range(20):
dummy[i+40] = np.random.normal(0., 0.01) + 1.
dummy[80:100] = 0.
return dummy
現在,使用的第一個(結果是第二類也是相同的),當我寫了下面,說:
In [2]: time = np.linspace(0,10,100)
In [5]: v = variable(time)
In [6]: v1 = v.state_dynamic
In [7]: v1.size
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/<ipython-input-7-e6a5d17aeb75> in <module>()
----> 1 v1.size
AttributeError: 'function' object has no attribute 'size'
In [8]: v2 = variable(np.size(time)).state_dynamic
In [9]: v2
Out[9]: <bound method variable.state_dynamic of <__main__.variable instance at 0x3ad0a28>>
In [10]: v1[0,0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/<ipython-input-10-092bc2b9f982> in <module>()
----> 1 v1[0,0]
TypeError: 'instancemethod' object has no attribute '__getitem__'
我希望通過寫
variable(length).state_dynamic
我會訪問
np.zeros((2, np.size(length)))
無論如何,如果我做了一些極其荒唐,請讓我知道:),並隨時給任何樣的建議。提前感謝您的寶貴時間和關注。最好的祝福。
編輯#1:
@wheaties:
感謝您的快速回復和幫助:)
什麼我目前要做的是以下幾點。我必須繪製幾個「變量」,例如狀態,控制,輟學,調度和干擾。所有變量取決於三個參數,即動態,靜態和時間。此外,狀態和控制是np.zeros((2, np.size(length)))
,中斷和調度是np.zeros(np.size(length))
和干擾具有特定形式(見上文)。最初,我在腳本中聲明瞭它們,列表很長,看起來很醜。我使用這些變量來存儲考慮的動態系統的響應並繪製它們。我不知道這是否是這樣做的好方法,如果您有任何建議,請分享。再次
感謝您的幫助。
我不認爲這個'variable'類正確表示變量的概念。首先,如果'v'是一個'variable',那麼'v.state_dynamic()不是v.state_dynamic()'。您對'v.state_dynamic任何更改()'將有效地被忽略,因爲下一次訪問'v.state_dynamic()',你會得到一個新的數組。爲什麼不使用實際變量? – user2357112