是否有可能在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
Run Code Online (Sandbox Code Playgroud)
我希望能够输入:
>>> d['temp']
Run Code Online (Sandbox Code Playgroud)
得到这个(数据的第一个"页面"):
>>> array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
Run Code Online (Sandbox Code Playgroud)
要么:
>>> d['Jan'] # assume months are Jan-June
Run Code Online (Sandbox Code Playgroud)
得到这个
>>> array([[0,6],
[12,18],
[24,30]])
Run Code Online (Sandbox Code Playgroud)
我经历过这样的事情:http://www.scipy.org/RecordArrays很多次,但是看不出我是怎么设置的.
Joe*_*ton 12
实际上,你可以使用结构化数组做类似的事情,但它通常比它的价值更麻烦.
你想要的基本上是标记轴.
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')
Run Code Online (Sandbox Code Playgroud)