2016-07-13 17 views
0

Ich habe Zeitreihendaten im HDF-Format. Ich verwende den folgenden Code, um die Daten aus den hdf-Dateien zu lesen. Jetzt habe ich versucht, Daten auf der Grundlage der Breite und Länge für die Daten mit jdn (julian Tag-Nummer) zu verbinden. Daten mit dem gleichen julianischen Tag stellen die kontinuierliche RaumdatenWie füge ich zwei oder drei 3D-Arrays in Python zusammen?

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[:,:] 

meine Daten in dieser Verbindung gebunden sind: https://drive.google.com/folderview?id=0B2rkXkOkG7ExX2lTTWEySU1fOWc&usp=sharing

+0

Was ist Ihr Endziel? (d. h. ein großes Datenfeld mit sequentiellen Informationen aus jeder Datei? Etwas anderes?) –

+0

@Heather QC Mein Endziel ist es, die täglichen Zeitreihen-Datensätze zu bekommen. Also habe ich versucht, Daten aus Dateien zu kombinieren, die denselben Julianischen Tag haben, aber nicht erfolgreich sein können. Wie Sie sagten, ein großes Datenfeld mit sequentiellen Informationen aus jeder Datei :). – bikuser

Antwort

1

Numpy des hstack, vstack oder dstack (abhängig von der Achse Sie möchten die beitreten Arrays) verbinden mehrdimensionale Arrays.

Beachten Sie, dass für MODIS Aerosol Daten speziell, hstack mit den Arrays verbinden behält sich das Recht einen Fehler aus, weil manchmal die Arrays 203 x 135 und manchmal 204 x 135, so dass die horizontale Dimension immer

Gebäude wird nicht überein auf Ihrem Code (nicht schön, aber funktional):

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 
+0

Ich bin auf der Suche nach etwas wie dstack, aber nicht in der Lage, als Mosaik beizutreten – bikuser

+0

Was meinst du mit Mosaic? –

+0

, da dies gerasterte Daten mit x- und y-Dimension als Längen- und Breitengrad sind. Ich möchte Datensätzen mit derselben julianischen Tagesnummer beitreten. Einfach Daten mit der gleichen julianischen Tagesnummer sind wie zwei Kacheln (Bilder) desselben Tages, also möchte ich diese beiden Kacheln verbinden, um eins zu erhalten wie in der Gdal Mosaikfunktion – bikuser