传递给函数的 numpy 数组没有改变

我已经尝试了很多来解决这个问题,但不幸的是没能解决它。


我想将一个 numpy 数组传递给一个函数并在那里进行更改。


def GetDataFromDAQ(self, timestamp, msdata, signalname):

    tmptime, tmpdata = self.DAQ.return_data(signalname)

    timestamp= np.append(timestamp, tmptime)

    msdata = np.append(msdata, tmpdata)

这就是函数的调用


self.ActiveMSData = MeasurementData()

self.GetDataFromDAQ(self.ActiveMSData.RawData["timestamps"], self.ActiveMSData.RawData["data"], "frequency")

那是班级的一部分


class MeasurementData():

def __init__(self):

    self.RawData = {}

    self.RawData["timestamps"] = np.empty(0)

    self.RawData["data"] = np.empty(0) 

我用 VS Code 调试它,发现函数中的数组时间戳和 msdata 被填充,但我传递的 Measurementclass 的成员根本没有改变。

我在这里错过了什么?


千巷猫影
浏览 110回答 1
1回答

临摹微笑

函数中的赋值使名称成为函数范围内的变量。如果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,dt = 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 nprawdata = {'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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python