我正在尝试使用以下代码将目录中 31 个文件中的数据append
到numpy
数组中。
directory = r"C:UsersmatthDownloadsAMSRE"
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)
。我想要一个形状为(31, 586, 1383)
的numpy
数组,因为目录中有 31 个文件。但是,当我print
我在代码中制作的output
数组的shape
时,它的形状是(586, 1383)
,我不知道为什么。有谁知道如何使用append
创建一个形状为(31, 586, 1383)
的 numpy 数组?提前谢谢。
np.vstack
确实将 numpy 数组的数组(或元组(堆叠到数组的行中,但看起来你给它一个数组。
我建议在循环访问数据之前初始化output
空数组(或其他一些假值(。然后,我建议将最后一行替换为以下内容,使缩进保持以前的缩进
if output:
output = np.vstack((output,soil_moisture2006))
else:
output = soil_moisture2006
这将尝试将数据附加到output
,除非它是第一组数据,在这种情况下,它将初始化output
到该数据。这可确保output
与其余数据的形状相同,因此您可以对其使用vstack
。就像提到的评论一样,我真的不知道您是否需要使用vstack
,但对我来说,尝试使用您使用的方法回答您的问题似乎比完全重写它更容易。
我没有您的文件,所以显然我无法运行它来测试它,但似乎它可以解决您的问题。让我知道这是否有帮助。