将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 个回答
8
有几种方法可以做到这一点。一个方法是选择recarray中的多个列,然后把它们转换成浮点数,最后再调整成一个二维数组:
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,因为它可以帮助你更轻松地处理不同类型的数据。