【问题标题】:Python Numpy: Structured Arrays vs Same Datatype Array Operation CostPython Numpy:结构化数组与相同数据类型的数组操作成本
【发布时间】:2018-11-16 00:46:53
【问题描述】:

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

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

其中前两个需要是uint32,而温度和湿度可以是uint8sensor_ons 可以是bool 类型。

我稍后需要根据line_number的组合对二维数组进行排序,然后计数。我还需要对所有温度和湿度数据列表(分别)执行平均值和其他统计计算。

我找到了便于数据存储和检索的结构化数组:

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

为了这个 vs

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 处理能力、矢量化处理、排序速度等)?还有其他推荐的解决方案吗?

【问题讨论】:

  • 我认为您只需要对真实数据进行一些计时。我们可以根据经验做出猜测,但它们只是——猜测。

标签: python arrays numpy


【解决方案1】:

我对几种数组类型进行了一些性能测试。我的测试结果可作为此主题的答案:
is ndarray faster than recarray access?
(忽略对我问题的否决。显然有人不喜欢我的提问方式。)

简短版本:从掩码数组中提取数据比在 ndarray 上执行相同操作要慢得多。结构化数组和重新数组的访问时间比 ndarray 慢,但都只有几分之一秒。显然,使用掩码数组时会有开销(可能类似于记录数组?)。这里对数组类型之间的区别进行了很好的讨论:
numpy-discussion:structured-arrays-recarrays-and-record-arrays

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

【讨论】:

  • 链接已损坏...
猜你喜欢
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2018-11-30
相关资源
最近更新 更多