检查包的索引是否连续,然后加入它们的d

2024-09-27 07:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从加速计上获取数据包。这些包含固定长度的x、y、z(各10个)加速度测量值。我想从连续的包中制作时间序列。当有一个包丢失时,我完成了上一个时间序列并开始制作一个新的

数据在两个np.array中(只是为了更清楚)。第一个包含包的索引:

share_num = np.array([1, 2, 3, 5, 8, 9, 10 ...], dtype=int) 

第二个包含链接到文件包索引的数据:

share_sensor = np.array([[x1_1,y1_1,z1_1,...,x10_1,y10_1,z10_1],
                         [x1_2,y1_2,z1_2,...,x10_2,y10_2,z10_2],
                                  ...             ], dtype=int)

这个特定示例的输出(在我的示例中是np.array的列表),因为有从1到3的连续数字:

X = [np.array([x1_1,y1_1,z1_1,...,x10_3,y10_3,z10_3]),
     np.array([x1_5,y1_5,z1_5,...,x10_5,y10_5,z10_5]),
     np.array([x1_8,y1_8,z1_8,...,x10_10,y10_10,z10_10]),
                  ...                                ]

我的尝试是有效的,但我确信它可以改进——关于速度,尤其是为了让它更清晰。我正在列出不同长度的numpy数组

X = []

for idx, (current_num, current_sensor) in enumerate(zip(share_num, share_sensor)):
        if idx == 0:           
            measurement = current_sensor
        else:
            if current_num - previous_num == 1:
                measurement = np.hstack([measurement, current_sensor])
            else: 
                X.append(measurement)

                measurement = current_sensor               

        previous_num = current_num

    X.append(measurement)

Tags: sharenp时间序列currentsensorarraynum
1条回答
网友
1楼 · 发布于 2024-09-27 07:23:45

这里有一种使用numpy原语的方法:

#random data
share_num=sorted(random.sample(range(20),8))
share_sensors=np.random.rand(8,30)

#find "packets"
splits,=(np.diff(share_num)>1).nonzero()
gp_sensors=np.split(share_sensors,splits+1)

X=[g.ravel() for g in gp_sensors]

这种方式效率更高,因为没有复制传感器数据:

In [3]: share_sensors.flags.owndata
Out[3]: True

In [4]: gp_sensors[0].flags.owndata
Out[4]: False

In [5]: X[0].flags.owndata
Out[5]: False

相关问题 更多 >

    热门问题