2017-10-08 122 views
1

我正試圖將大約10列數據加載到numpy loadtxt。我希望每列都是一個單獨的numpy數組。我怎樣才能做到這一點?只有兩列實際上被進口的,我需要所有10。這裏是我的代碼:如何使用numpy loadtext加載多列?

import sys 
import numpy as np 
import scipy.stats 

data = np.loadtxt('AD_hw6.txt') 

p = data[:,0] #pressure in hpa 
z = data[:,1] #height in m 
t = data[:,2] #tempertature in degrees celcius 
dp = data[:,3] #dewpoint in degrees celcius 
rh = data[:,4] #relative humidity (%) 
mr = data[:,5] #mixing ratio in g/kg 

這僅僅是5,但我使用的是10

+0

爲什麼你不能使用2D數組? – Antimony

+1

如果您需要幫助,您需要顯示一些數據。 –

+0

這應該很好,所以你的數據文件可能不兼容。根據Coldspeed的評論,我們需要查看一些(部分)數據文件來查看實際問題。 – Evert

回答

0

我認爲問題是,第一列僅排有2個值;我建議你爲列中的空行填入零或NaN。

+0

我將本網站的所有數據複製並粘貼到文本文件中。 – astrogirl79

+0

對不起,這裏是鏈接http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR=2012&MONTH=10&FROM=1012&TO=1012&STNM=72520 – astrogirl79

+0

我需要每一列的數據是一個numpy數組 – astrogirl79

0

我認爲問題在於第一列行只有2個值;我建議你爲列中的空行填入零或NaN。

+0

修復它,謝謝! – astrogirl79

1

隨着從WY鏈接創建與

----------------------------------------------------------------------------- 
    PRES HGHT TEMP DWPT RELH MIXR DRCT SKNT THTA THTE THTV 
    hPa  m  C  C  % g/kg deg knot  K  K  K 
----------------------------------------------------------------------------- 
1000.0 116 
    971.0 357 8.0 6.0  87 6.07 200  5 283.5 300.6 284.6 
    956.0 487 7.2 5.0  86 5.75 215  18 284.0 300.2 285.0 
    942.1 610 8.0 5.5  84 6.06 230  30 286.0 303.2 287.1 
    933.0 691 8.6 5.9  83 6.28 233  30 287.4 305.3 288.5 
    925.0 763 8.0 4.9  81 5.90 235  30 287.5 304.4 288.5 
    908.2 914 7.2 3.2  76 5.32 245  29 288.2 303.5 289.1 
... 

的文件的拷貝 - 正糊可以裝入它作爲與二維數組:

In [1]: data = np.genfromtxt('stack46636938.txt',skip_header=5) 
In [2]: data.shape 
Out[2]: (35, 11) 
In [3]: data[:3] 
Out[3]: 
array([[ 971. , 357. , 8. , 6. , 87. , 6.07, 200. , 
      5. , 283.5 , 300.6 , 284.6 ], 
     [ 956. , 487. , 7.2 , 5. , 86. , 5.75, 215. , 
      18. , 284. , 300.2 , 285. ], 
     [ 942.1 , 610. , 8. , 5.5 , 84. , 6.06, 230. , 
      30. , 286. , 303.2 , 287.1 ]]) 

注意,我跳過了線只有兩個值。

現在我能做的

p = data[:,0] 

我也可以使用解壓選項

In [7]: p,z,t = np.genfromtxt('stack46636938.txt',skip_header=5,unpack=True,usecols=range(3)) 

這是使用Python與二維數組的轉置拆包相當於:

In [9]: p,z,t = data[:,:3].T 

我也可以將數據作爲結構化數組加載:

按名稱

In [15]: data['PRES'] 
Out[15]: 
array([ 971. , 956. , 942.1, 933. , 925. , 908.2, 900. , 875. , 
     850. , 842.8, 827. , 811.4, 792. , 786. , 781. , 776. , 
     752.1, 736. , 726. , 724.1, 721. , 714. , 710. , 706. , 
     703. , 701. , 700. , 690. , 671. , 670.8, 669. , 666. , 
     662. , 645.4, 639. ]) 

In [11]: names = ' PRES HGHT TEMP DWPT RELH MIXR DRCT SKNT THT 
    ...: A THTE THTV'.split() 
In [12]: names 
Out[12]: 
['PRES', 
'HGHT', 
'TEMP', 
'DWPT', 
.... 
'THTV'] 
In [13]: data = np.genfromtxt('stack46636938.txt', skip_header=5, dtype=None, names=names) 
In [14]: data[:3] 
Out[14]: 
array([(971. , 357, 8. , 6. , 87, 6.07, 200, 5, 283.5, 300.6, 284.6), 
     (956. , 487, 7.2, 5. , 86, 5.75, 215, 18, 284. , 300.2, 285.), 
     (942.1, 610, 8. , 5.5, 84, 6.06, 230, 30, 286. , 303.2, 287.1)], 
     dtype=[('PRES', '<f8'), ('HGHT', '<i4'), ('TEMP', '<f8'), ('DWPT', '<f8'), ('RELH', '<i4'), ('MIXR', '<f8'), ('DRCT', '<i4'), ('SKNT', '<i4'), ('THTA', '<f8'), ('THTE', '<f8'), ('THTV', '<f8')]) 

和接入領域還與右排跳過並解壓:

np.loadtxt('stack46636938.txt',skiprows=5,unpack=True) 

如果短行包括我得到一個錯誤。它開始期待兩列,然後是11時的對象。