从numpy数组访问块

1 投票
1 回答
1090 浏览
提问于 2025-04-18 09:18

我有一个用制表符分隔的表格,存放在一个文本文件里。

Year    TMAX1   TMAX2   TMAX3   TMAX4   TMAX5   TMAX6   TMAX7   TMAX8   TMAX9   TMAX10  TMAX11  TMAX12 TMIN1    TMIN2   TMIN3   TMIN4   TMIN5   TMIN6   TMIN7   TMIN8   TMIN9   TMIN10  TMIN11  TMIN12 
1964    29.27419355 28.01724138 26.83870968 21.43333333 17.46774194      14.66666667    13.40322581 15.03225806 16.93333333 18.62903226 23.9    23.40322581 12.0483871

我想把每一块数据读入一个numpy数组。目前我有这个。

import numpy as np
metData = open('metData.txt', "r")
climateVarNames = ['YEAR', 'TMAX', 'TMIN', 'RAIN', 'EVAP', 'RADTN', 'RAINDAYS', 'FROSTDAYS']
a = np.loadtxt(metData, skiprows=1)
for climateVar in climateVarNames:
    if "TMAX" == climateVar:
        TMAX = 1,2,3,4,5,6,7,8,9,10,11,12
        mTx = np.array(a[:,(TMAX)])
    if "TMIN" == climateVar:
        TMIN = 13,14,15,16,17,18,19,20,21,22,23,24
        mTn = np.array(a[:,(TMIN)])

我该如何把列的值自动分配给 TMAX,还有其他的值呢?或者有没有更好的方法?

1 个回答

1
import numpy as np
a = np.loadtxt('metData.txt', skiprows=1, delimiter='\t')
mTx = a[:, 1:13]
mTn = a[:, 13:25]

注意,如果 metData.txt 文件里有多于一行的内容,那么 a 就会变成一个二维数组。可是,如果这个数据文件只有一行,那么 a 就会是一个一维数组。在这种情况下,a[:,(1,2,3,4,5,6,7,8,9,10,11,12)] 会出现索引错误(IndexError)。所以,上面的代码是基于数据文件里有多于一行的内容来写的。

撰写回答