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

PythonNumpy:结构化数组与相同数据类型数组的操作成本,python,arrays,numpy,Python,Arrays,Numpy,我想创建结构的数组: [line_number,count,temperature,humidity,sensor1_on,sensor2_on] 其中前两个需要是uint32,而温度和湿度可以是uint8,并且s上的传感器可以是bool类型 稍后,我需要根据行数的组合对2d数组进行排序,然后进行计数。我还需要对所有温度和湿度数据列表(单独)执行平均值和其他统计计算 我发现结构化阵列便于数据存储和检索: np_data=np.zeros([num_lines],

我想创建结构的数组:

[line_number,count,temperature,humidity,sensor1_on,sensor2_on]
其中前两个需要是
uint32
,而温度和湿度可以是
uint8
,并且
s上的
传感器可以是
bool
类型

稍后,我需要根据
行数的组合对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处理能力、矢量化处理、排序速度等)?有没有其他建议的解决方案?

我对几种阵列类型进行了性能测试。我的测试结果可以在以下主题中找到答案:

(忽略对我问题的否决票。显然有人不喜欢我的提问方式。)

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


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

我认为你只需要在现实数据上做一些计时。我们可以根据经验进行猜测,但它们只是猜测而已。