簡體   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