我正在尝试使用以下代码将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数组?提前谢谢。
答案 0 :(得分:0)
np.vstack
确实将numpy数组的数组(或元组)堆叠到数组的行中,但似乎你给它一个数组。
我建议在循环数据之前初始化output
空数组(或其他一些假值)。然后,我建议用以下内容替换最后一行,保持缩进与之前的缩进
if output:
output = np.vstack((output,soil_moisture2006))
else:
output = soil_moisture2006
这将尝试将数据附加到output
,除非它是第一组数据,在这种情况下,它会将output
初始化为该数据。这可确保output
与其他数据的形状相同,因此您可以在其上使用vstack
。就像上面提到的评论一样,我真的不知道你是否需要使用vstack
,但我似乎更容易使用你使用的方法来回答你的问题,而不是完全重写它。
我没有你的文件,显然我无法运行它来测试它,但它似乎可以解决你的问题。如果这有帮助,请告诉我。