Python 将numpy重新阵列(部分)转换为2d阵列?

Python 将numpy重新阵列(部分)转换为2d阵列?,python,numpy,recarray,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 我们希望生成每个值的平均值数组(就好

我们有一组针对各个日期的数据重新排列-第一个属性是时间戳,其余是值

其中几个:

    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)
似乎更好的方法是将每天转换为一个只有数字的2d数组(去掉时间戳),然后在一次操作中对所有数字按元素进行平均,但我们找不到这样做的方法-它始终是一个1d对象数组


有人知道怎么做吗?

有几种方法。一种方法是选择重新排列的多个列并将它们转换为浮点数,然后重新塑造为二维阵列:

new_data = data[['a','b','c']].astype(np.float).reshape((data.size, 3))
P>可选的,你可能会考虑这样的事情(可忽略得慢,但更可读):


还请注意,研究此类操作可能是一个好主意,这样您就可以轻松处理异构数据。

太好了,谢谢!我仍在努力适应在整个阵列上做一些事情——我的本能是单独处理元素。我测试中的一个注意事项是,.view(np.float)部分没有复制,而奇特的切片却复制了。@Joe:如果我没有弄错的话,@wilberforce关于复制是正确的:
data[[['a','b','c']]。base
没有,所以这意味着它拥有自己的数据,而不是从
data
继承数据。这是有意义的,因为字段通常是不连续的。如果您确认这一点,最好更新您的答案。:)@EOL-你完全正确!(我不知道当时我在想什么…@EOL-另外,用
数据[['a',b',c']]]
索引结构化数组将在未来版本的numpy中返回一个视图:正如您所提到的,它现在没有,过去也没有。
new_data = np.vstack([data[item] for item in ['a','b','c']]).T