我正在尝试将大约10列数据加载到numpy loadtxt
中。我希望每列都是一个单独的numpy数组。我怎样才能做到这一点?实际上只导入了两列,我需要全部10.这里是我的代码:
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 :(得分:1)
使用WY链接中的copy-n-paste我使用
创建一个文件-----------------------------------------------------------------------------
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
...
我可以将它作为2d数组加载:
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解包和2d数组的转置:
In [9]: p,z,t = data[:,:3].T
我还可以将数据作为结构化数组加载:
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')])
并按名称访问字段
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
也适用于右行跳过并解压缩:
np.loadtxt('stack46636938.txt',skiprows=5,unpack=True)
如果包含短行,我会收到错误消息。它开始期待两列,然后在它得到11时的对象。
答案 1 :(得分:0)
我认为问题是第一列行只有2个值;我建议你为列中的空行填写零或NaN。
答案 2 :(得分:0)
我认为问题是第一列行只有2个值;我建议你为列中的空行填写零或NaN。