将numpy recarray(部分)转换为2d数组?

时间:2010-08-11 14:49:50

标签: python numpy recarray

我们为个别日子提供了一组数据重组 - 第一个属性是时间戳,其余属性是值。

其中几个:

    ts             a    b    c
2010-08-06 08:00, 1.2, 3.4, 5.6
2010-08-06 08:05, 1.2, 3.4, 5.6
2010-08-06 08:10, 1.2, 3.4, 5.6
2010-08-06 08:15, 2.2, 3.3, 5.6
2010-08-06 08:20, 1.2, 3.4, 5.6

我们想要生成每个值的平均值数组(就好像您将所有日期数据放在彼此之上,并平均排列的所有值)。所有匹配的时间戳都是时间,因此我们可以通过创建带有时间戳的结果重新排列,其他列全部为0来完成,然后执行以下操作:

for day in day_data:
    result.a += day.a
    result.b += day.b
    result.c += day.c

result.a /= len(day_data)
result.b /= len(day_data)
result.c /= len(day_data)

似乎更好的方法是将每天转换为只有数字的二维数组(减去时间戳),然后在一次操作中将它们全部按元素进行平均,但我们找不到方法这样做 - 它总是一个对象数组。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:8)

有几种方法可以做到这一点。一种方法是选择重新排列的多个列并将它们转换为浮点数,然后重新整形为2D数组:

new_data = data[['a','b','c']].astype(np.float).reshape((data.size, 3))

或者,您可能会考虑这样的事情(可忽略的慢,但更具可读性):

new_data = np.vstack([data[item] for item in ['a','b','c']]).T

另请注意,查看pandas这样的操作可能是个好主意,这样您就可以轻松处理异构数据。