[英]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.