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)
添加回答
举报