3D Numpy记录数组

9

在numpy中是否可以有一个三维记录数组?(也许这不可能,或者有更简单的方法来实现--我也愿意尝试其他选项)。

假设我想要一个数组来保存3个变量的数据(比如温度、降水和湿度),每个变量的数据实际上是一个2年(行)和6个月数据(列)的二维数组,我可以这样创建:

>>> import numpy as np

>>> d = np.array(np.arange(3*2*6).reshape(3,2,6))
>>> d

#
# comments added for explanation...
#        jan   feb   mar   apr   may   Jun    

array([[[ 0,    1,    2,    3,    4,    5],   # yr1  temp
        [ 6,    7,    8,    9,   10,   11]],  # yr2  temp

       [[12,   13,   14,   15,   16,   17],   # yr1  precip
        [18,   19,   20,   21,   22,   23]],  # yr2  precip

       [[24,   25,   26,   27,   28,   29],   # yr1  humidity
        [30,   31,   32,   33,   34,   35]]]) # yr2  humidity

我希望您能够输入以下内容:

我想要能够键入:

>>> d['temp']

并获取这个(数据的第一页):
>>> array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11]])

或者:

>>> d['Jan']   # assume months are Jan-June

并且得到这个

>>> array([[0,6],
          [12,18],
          [24,30]])

我经常阅读http://www.scipy.org/RecordArrays网页,但不知道如何设置我需要的内容。
1个回答

12
实际上,您可以使用结构化数组做类似的事情,但通常会比值得麻烦。您想要的基本上是带标签的轴。 Pandas(建立在numpy之上)提供了您想要的内容,并且如果您需要此类型的索引,则是更好的选择。还有Larry(用于标记数组),但它在很大程度上已被Pandas取代。
此外,您应该查看numpy文档以获取有关此信息的结构化数组的信息,而不是FAQ。 numpy文档具有更多信息。 http://docs.scipy.org/doc/numpy/user/basics.rec.html 如果您确实想采用纯numpy路线,请注意,结构化数组可以包含多维数组。(在指定dtype时请注意形状参数。)但这将变得比值得更复杂。
pandas 的术语中,您需要的是一个 Panel。不过,您可能应该先熟悉 DataFrame。以下是使用 Pandas 的方法:
import numpy as np
import pandas

d = np.array(np.arange(3*2*6).reshape(3,2,6))

dat = pandas.Panel(d, items=['temp', 'precip', 'humidity'], 
                      major_axis=['yr1', 'yr2'], 
                      minor_axis=['jan', 'feb', 'mar', 'apr', 'may', 'jun'])

print dat['temp']
print dat.major_xs('yr1')
print dat.minor_xs('may')

嗯,好的,这部分验证了我的困惑。Pandas看起来很理想,谢谢! - tbc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接