1 回答

TA貢獻1982條經驗 獲得超2個贊
函數中的賦值使名稱成為函數范圍內的變量。
如果GetDataFromDAQ是同一類/實例的方法/函數,您必須將新數組分配給實例屬性。
def GetDataFromDAQ(self, timestamp, msdata, signalname):
? ? tmptime, tmpdata = self.DAQ.return_data(signalname)
? ? self.RawData["timestamps"] = np.append(timestamp, tmptime)
? ? self.RawData["data"] = np.append(msdata, tmpdata)
如果您希望函數不那么具體,則必須返回新數據。
def GetDataFromDAQ(self, timestamp, msdata, signalname):
? ? tmptime, tmpdata = self.DAQ.return_data(signalname)
? ? t = np.append(timestamp, tmptime)
? ? d = np.append(msdata, tmpdata)
? ? return t,d
t = self.ActiveMSData.RawData["timestamps"]
d = self.ActiveMSData.RawData["data"]
t,d = self.GetDataFromDAQ(t,d,"frequency")
self.ActiveMSData.RawData["timestamps"],self.ActiveMSData.RawData["data"] = t,d
您最初嘗試的一個并發癥是您正在創建一個全新的對象append而不是修改現有對象。如果您真的想嘗試使該函數通用,您可以預期時間序列數據可能變成的最大大小,并將數組初始化為該大小,并用一個值填充它們,使您可以確定在何處插入下一個數據系列. 然后在函數中您可以分配給數組的一部分而無需創建新對象。像這樣的東西。
import numpy as np
rawdata = {'timestamps':np.full(10,np.nan),
? ? ? ? ? ?'data':np.full(10,np.nan)}
def f(t,d):
? ? nextt = np.argmax(np.isnan(t))
? ? nextd = np.argmax(np.isnan(d))
? ? newdata = [1,2,3]
? ? newtimestamps = [8,7,6]
? ? endt = nextt + len(newtimestamps)
? ? endd = nextd + len(newdata)
? ? t[nextt:endt] = newtimestamps
? ? d[nextd:endd] = newdata
? ? return None
? ??
##print(rawdata)
t = rawdata['timestamps']
d = rawdata['data']
f(t,d)
f(t,d)
print(rawdata)
添加回答
舉報