使用a.append创建所需形状的numpy数组

时间:2017-08-07 03:53:25

标签: python arrays numpy append

我正在尝试使用以下代码将append数据从目录中的31个文件转换为numpy数组。

directory = r"C:\Users\matth\Downloads\AMSRE"
for root, dirs, filenames in os.walk(directory):
    for f in filenames:
        if f.startswith("AMSR_E_L3_DailyLand_V06_201001"):
            log = open(os.path.join(root, f), 'r')
            file_name = (("C:\\Users\\matth\\Downloads\\AMSRE\\") + f)
            hdf = SD(file_name, SDC.READ)
            g = gdal.Open(('HDF4_EOS:EOS_GRID:') + file_name + (':Ascending_Land_Grid:A_Soil_Moisture'))
            sm = g.ReadAsArray()
            lons = np.fromstring ( urllib2.urlopen("ftp://sidads.colorado.edu/pub/tools/easegrid/lowres_latlon/MLLONLSB").read(), \
dtype=np.int32 )/100000.
            lats = np.fromstring ( urllib2.urlopen("ftp://sidads.colorado.edu/pub/tools/easegrid/lowres_latlon/MLLATLSB").read(), \
dtype=np.int32 )/100000.
            lons = lons.reshape(sm.shape)
            lats = lats.reshape(sm.shape)
            smm = np.ma.array ( sm, mask=np.logical_or ( sm==-9999, sm==9999))
            soil_moisture = []
            soil_moisture.append(smm)
            soil_moisture2006 = np.asarray(soil_moisture)
        output = np.vstack(soil_moisture2006)

这些文件都以AMSR_E_L3_DailyLand_V06_201001开头,这就是我有

行的原因
if f.startswith("AMSR_E_L3_DailyLand_V06_201001"): 

一个文件的形状为(586, 1383)。我希望有一个形状为numpy的{​​{1}}数组,因为目录中有31个文件。但是,当我(31, 586, 1383)我在代码中创建的print数组的shape时,其形状为output,我不明白为什么。有谁知道我如何使用(586, 1383)创建一个形状为append的numpy数组?提前谢谢。

1 个答案:

答案 0 :(得分:0)

np.vstack确实将numpy数组的数组(或元组)堆叠到数组的行中,但似乎你给它一个数组。

我建议在循环数据之前初始化output空数组(或其他一些假值)。然后,我建议用以下内容替换最后一行,保持缩进与之前的缩进

if output:
    output = np.vstack((output,soil_moisture2006))
else:
    output = soil_moisture2006

这将尝试将数据附加到output,除非它是第一组数据,在这种情况下,它会将output初始化为该数据。这可确保output与其他数据的形状相同,因此您可以在其上使用vstack。就像上面提到的评论一样,我真的不知道你是否需要使用vstack,但我似乎更容易使用你使用的方法来回答你的问题,而不是完全重写它。

我没有你的文件,显然我无法运行它来测试它,但它似乎可以解决你的问题。如果这有帮助,请告诉我。