2017-10-08 1 views
1

Ich versuche loadtxt etwa 10 Spalten von Daten in numpy zu laden. Ich möchte, dass jede Spalte ein separates numpy Array ist. Wie kann ich das machen? Es werden nur zwei Spalten tatsächlich eingeführt werden, damit ich alle 10. Hier ist mein Code:Wie werden mehrere Spalten mit numpy loadtext geladen?

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 

Dies ist nur 5, aber ich bin mit 10.

+0

bekommt Warum können Sie nicht mit einem 2D-Array arbeiten? – Antimony

+1

Wenn Sie Hilfe benötigen, müssen Sie einige Daten anzeigen. –

+0

Das sollte gut funktionieren, daher ist Ihre Datendatei wahrscheinlich inkompatibel. Laut dem Kommentar von Coldspeed müssten wir einige (Teil der) Datendatei sehen, um zu sehen, was das eigentliche Problem ist. – Evert

Antwort

0

ich glaube, das Problem ist, dass die erste Spalte Zeile nur hat 2 Werte; Ich schlage vor, dass Sie Nullen oder NaN für die leeren Zeilen in den Spalten ausfüllen.

+0

Ich habe alle Daten dieser Website in eine Textdatei kopiert und eingefügt. – astrogirl79

+0

Entschuldigung hier ist der Link http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR=2012&MONTH=10&FROM=1012&TO=1012&STNM=72520 – astrogirl79

+0

Ich brauche jede Spalte der Daten zu sein ein numply Array – astrogirl79

0

Ich denke, das Problem ist, dass die erste Spalte Zeile nur 2 Werte hat; Ich schlage vor, dass Sie Nullen oder NaN für die leeren Zeilen in den Spalten ausfüllen.

+0

Das reparierte es, danke! – astrogirl79

1

mit einer Kopie-n-Paste aus dem WY Link ich eine Datei erstellen mit

----------------------------------------------------------------------------- 
    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 
... 

ich es als ein 2D-Array geladen werden kann mit:

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 ]]) 

Beachten Sie, dass ich die Linie übersprungen mit nur zwei Werten.

Jetzt kann ich

p = data[:,0] 

ich auch die auspacken Option

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

Dies entspricht der Verwendung von Python mit der Transponierung des 2D-Arrays Auspacken verwenden:

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

I könnten auch die Daten als strukturierte Array laden mit:

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')]) 

und Zugang per Namen

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. ]) 

loadtxt auch mit der rechten Reihe arbeitet überspringen und entpacken:

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

Wenn die kurze Reihe enthalten ist, ich einen Fehler. Es beginnt zwei Spalten erwartet und dann Objekte, wenn es 11.

Verwandte Themen