python - 如何在 python 中合并两个或三个 3D 数组?

标签 python numpy pandas hdf pyhdf

我有 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/

相关文章:

python - 比较 numpy 数组中的以下两个值

python - 迭代列并用提取的字符串替换值 [Pandas]

python - 使用 RSA python 加密消息时出错

python - 在 Numpy 中排列对称方阵的有效方法

OpenCV 2.4.8 : module compiled against API version 9

python - 如何使用解密 key 加密和解密 Pandas 数据帧?

python pandas数据框按降序排序

Python 正则表达式 - 贪婪量词并非在所有情况下都有效

python - 从opencv中的图片中删除大对象

python - 使用日期时间索引提高 Pandas read_csv 的速度