Python Numpy:结构化数组与相同数据类型数组的操作成本



我想创建一个数组的结构:

[line_number,count,temperature,humidity,sensor1_on,sensor2_on]

其中前两个需要是uint32,而温度和湿度可以是uint8,并且sensor_on可以是类型bool

我稍后需要根据line_number的组合对2d阵列进行排序,然后进行计数。我还需要对所有温度和湿度数据的列表进行平均值和其他统计计算(单独(。

我发现了便于数据存储和检索的结构化阵列:

np_data=np.zeros([num_lines],
                          dtype='uint32,'#Line No
                                'uint32,'# Count
                                'uint8,' #TEMP
                                'uint8,' #HUMID
                                'bool,' #S1 On
                                'bool'#S2 On
                          )

与相比

np_data=np.zeros([num_lines,5],dtype='uint32') 
# I would pack my bools into the last uint32 and then unpack later 
# but it seems like a waste of space

创建结构化数组与使用所有相同数据类型的数组相比,会损失什么吗(numpy处理能力、矢量化处理、排序速度等(?有没有其他解决方案可以推荐?

我对几种数组类型进行了一些性能测试。我的测试结果可以作为这个主题的答案:
ndarray比recarray访问快吗
(忽略对我问题的反对票。显然有人不喜欢我的提问方式。(

简短的版本:从掩码数组中提取数据比在ndarray上执行相同操作慢得多。结构化数组和重数组的访问时间比ndarray慢,但都是几分之一秒。很明显,使用屏蔽数组时会有开销(可能类似于记录数组?(。这里有一个很好的讨论数组类型之间的差异:
numpy讨论:结构化数组重数组和记录数组

还有其他限制。例如,许多(大部分/全部(numpy矩阵和数学运算都限于ndarrays(需要相同的数据类型(。我不认为这些适用于您的情况,因为您使用的是像表一样的结构化数组。

最新更新