2013-04-04 40 views
8

是否有存儲(X,Y),(X,Y,Z)或(X,Y,Z,T)在python數據的標準方式嗎?有沒有一種標準的方式來存儲python中的XY數據?

我知道numpy的陣列通常用於這樣的事情,但我想你可以用numpy的矩陣做也。

我看到使用2只列出了壓縮在一起,這側共步驟使用numpy的的。

XY_data = zip([x for x in range(0,10)] , [y for y in range(0,10)]) 

是否有標準?如果沒有,你的最喜歡方式,或者你最見的一個?

+0

你是詢問的空間座標明確,或者任意的數據? – 2013-04-04 15:59:04

+0

對我而言,我在問空間座標。但是,我相信如果您有任何有關互聯網社區的信息,都會很樂意學習。 – chase 2013-04-04 16:08:28

+1

附註:'[x for range(0,10)]'與簡單地'range(10)' – askewchan 2013-04-04 16:10:04

回答

5

一個不錯的方法是使用一個structured array。這提供了numpy數組的所有優點,但卻是一個方便的訪問結構。

所有你需要做的,讓你的numpy的陣列中的「結構化」,一個是給它dtype說法。這給每個「字段」一個名稱和類型。他們甚至可以有更復雜的形狀和層次,如果你願意的話,但在這裏就是我如何保持我的X-Y數據:

In [175]: import numpy as np 

In [176]: x = np.random.random(10) 

In [177]: y = np.random.random(10) 

In [179]: zip(x,y) 
Out[179]: 
[(0.27432965895978034, 0.034808254176554643), 
(0.10231729328413885, 0.3311112896885462), 
(0.87724361175443311, 0.47852682944121905), 
(0.24291769332378499, 0.50691735432715967), 
(0.47583427680221879, 0.04048957803763753), 
(0.70710641602121627, 0.27331443495117813), 
(0.85878694702522784, 0.61993945461613498), 
(0.28840423235739054, 0.11954319357707233), 
(0.22084849730366296, 0.39880927226467255), 
(0.42915612628398903, 0.19197320645915561)] 

In [180]: data = np.array(zip(x,y), dtype=[('x',float),('y',float)]) 

In [181]: data['x'] 
Out[181]: 
array([ 0.27432966, 0.10231729, 0.87724361, 0.24291769, 0.47583428, 
     0.70710642, 0.85878695, 0.28840423, 0.2208485 , 0.42915613]) 

In [182]: data['y'] 
Out[182]: 
array([ 0.03480825, 0.33111129, 0.47852683, 0.50691735, 0.04048958, 
     0.27331443, 0.61993945, 0.11954319, 0.39880927, 0.19197321]) 

In [183]: data[0] 
Out[183]: (0.27432965895978034, 0.03480825417655464) 

其他人可能會建議使用pandas,但如果你的數據相對簡單,樸實numpy的可能會更容易。

,如果你願意,你可以添加層次,但往往比必要的更加複雜。

例如:

In [200]: t = np.arange(10) 

In [202]: dt = np.dtype([('t',int),('pos',[('x',float),('y',float)])]) 

In [203]: alldata = np.array(zip(t, zip(x,y)), dtype=dt) 

In [204]: alldata 
Out[204]: 
array([(0, (0.27432965895978034, 0.03480825417655464)), 
     (1, (0.10231729328413885, 0.3311112896885462)), 
     (2, (0.8772436117544331, 0.47852682944121905)), 
     (3, (0.242917693323785, 0.5069173543271597)), 
     (4, (0.4758342768022188, 0.04048957803763753)), 
     (5, (0.7071064160212163, 0.27331443495117813)), 
     (6, (0.8587869470252278, 0.619939454616135)), 
     (7, (0.28840423235739054, 0.11954319357707233)), 
     (8, (0.22084849730366296, 0.39880927226467255)), 
     (9, (0.429156126283989, 0.1919732064591556))], 
     dtype=[('t', '<i8'), ('pos', [('x', '<f8'), ('y', '<f8')])]) 

In [205]: alldata['t'] 
Out[205]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

In [206]: alldata['pos'] 
Out[206]: 
array([(0.27432965895978034, 0.03480825417655464), 
     (0.10231729328413885, 0.3311112896885462), 
     (0.8772436117544331, 0.47852682944121905), 
     (0.242917693323785, 0.5069173543271597), 
     (0.4758342768022188, 0.04048957803763753), 
     (0.7071064160212163, 0.27331443495117813), 
     (0.8587869470252278, 0.619939454616135), 
     (0.28840423235739054, 0.11954319357707233), 
     (0.22084849730366296, 0.39880927226467255), 
     (0.429156126283989, 0.1919732064591556)], 
     dtype=[('x', '<f8'), ('y', '<f8')]) 

In [207]: alldata['pos']['x'] 
Out[207]: 
array([ 0.27432966, 0.10231729, 0.87724361, 0.24291769, 0.47583428, 
     0.70710642, 0.85878695, 0.28840423, 0.2208485 , 0.42915613]) 
+0

相同謝謝,我以前沒有見過。所以基本上同時使用壓縮和numpy數組創建一個不同的數據類型稱爲結構化數組? 熊貓與numpy相比有什麼優勢? – chase 2013-04-04 16:12:11

+0

我還沒有使用過熊貓,但它對於在數據集上進行大量不同的分組和過濾功能有點強大。如果你對numpy方法很熟悉,並且發現它們缺乏,請看看熊貓,但是我會從簡單的numpy開始。其他人當然會不同意:) – askewchan 2013-04-04 16:13:34

相關問題