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



我正在尝试使用以下代码将目录中 31 个文件中的数据appendnumpy数组中。

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,但对我来说,尝试使用您使用的方法回答您的问题似乎比完全重写它更容易。

我没有您的文件,所以显然我无法运行它来测试它,但似乎它可以解决您的问题。让我知道这是否有帮助。

最新更新