我有 hdf 格式的时间序列数据。我使用下面的代码从 hdf 文件中读取数据。现在,我尝试根据具有相同 jdn(儒略日数)的数据的纬度和经度加入数据。具有相同儒略日数的数据表示连续的空间数据
import glob
import numpy as np
import os
from pyhdf.SD import SD,SDC
files = glob.glob('MOD04*')
files.sort()
for f in files:
product = f[0:5]+ '-Atmospheric Product'
year = f[10:14]
jdn = f[14:17] # julian day number
# Read dataset.
hdf = SD(f, SDC.READ)
data3D = hdf.select('Deep_Blue_Aerosol_Optical_Depth_550_Land')
data = data3D[:,:].astype(np.double)
# Read geolocation dataset
lat = hdf.select('Latitude')
latitude = lat[:,:]
lon = hdf.select('Longitude')
longitude = lon[:,:]
我的数据附在这个链接中:https://drive.google.com/folderview?id=0B2rkXkOkG7ExX2lTTWEySU1fOWc&usp=sharing
最佳答案
Numpy 的 hstack , vstack ,或dstack (取决于您想要连接数组的轴)将连接多维数组。
请注意,对于 MODIS 气溶胶数据,使用 hstack 连接数组偶尔会引发错误,因为有时数组为 203 x 135,有时为 204 x 135,因此水平尺寸并不总是匹配
基于您的代码构建(不漂亮,但功能强大):
import glob
import numpy as np
import os
from pyhdf.SD import SD,SDC
files = glob.glob('MOD04*')
files.sort()
for n, f in enumerate(files):
product = f[0:5]+ '-Atmospheric Product'
year = f[10:14]
jdn = f[14:17] # julian day number
# Read dataset.
hdf = SD(f, SDC.READ)
data3D = hdf.select('Deep_Blue_Aerosol_Optical_Depth_550_Land')
data = data3D[:,:].astype(np.double)
# Read geolocation dataset
lat = hdf.select('Latitude')
latitude = lat[:,:]
lon = hdf.select('Longitude')
longitude = lon[:,:]
if n != 0 and jdn != old_jdn:
#do analysis; write to file for later analysis; etc.
pass
if n == 0 or jdn != old_jdn:
data_timeseries = data
latitude_timeseries = latitude
longitude_timeseries = longitude
else:
data_timeseries = np.vstack((data_timeseries, data))
latitude_timeseries = np.vstack((latitude_timeseries, latitude))
longitude_timeseries = np.vstack((longitude_timeseries, longitude))
print data_timeseries.shape
print latitude_timeseries.shape
print longitude_timeseries.shape
old_jdn = jdn
关于python - 如何在 python 中合并两个或三个 3D 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353269/