繁体   English   中英

3d numpy记录数组

[英]3d numpy record array

是否有可能在numpy中有一个3-D记录数组? (也许这是不可能的,或者只是一种更容易的方式来做事 - 我对其他选择持开放态度)。

假设我想要一个包含3个变量数据的数组(比如temp,precip,humidity),每个变量的数据实际上是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很多次,但是看不出我是怎么设置的。

实际上,你可以使用结构化数组做类似的事情,但它通常比它的价值更麻烦。

你想要的基本上是标记轴。

Pandas (建立在numpy之上)提供了你想要的东西,如果你想要这种类型的索引,它是更好的选择。 还有拉里(标记阵列) ,但它在很大程度上已被熊猫取代。

此外,您应该查看有关结构化数组的numpy文档,而不是常见问题解答。 numpy文档有更多的信息。 http://docs.scipy.org/doc/numpy/user/basics.rec.html

如果您确实想要采用纯粹的numpy路由,请注意结构化数组可以包含多维数组。 (注意指定dtype时的形状参数。)但这会很快变得比它的价值更复杂。

pandas术语中,你想要的是一个Panel 不过,您应该首先熟悉DataFrame

以下是你如何用熊猫做的事情:

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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM