2017-12-12 6 views
0

나는 파이썬에서 해양학 데이터로 작업하고 있습니다. 저는 현재 x 축에 시간, y 축에 압력, 윤곽선으로 온도 등고선 그래프를 작성하려고합니다. 지금은 데이터 자체에서 얻은 값으로 시간 배열의 형식을 지정하려고합니다. 내가 가지고있는 코드는 해당 시간이 추가되지 않은 채 연중 날을 생성합니다. 매일 6 시간, 12 시간, 18 시간을 추가 할 수있는 방법이 필요합니다. 그 이유는 데이터가 매일 4 시간 씩 실행되고 6 시간 간격으로 분리 된 물 기둥의 프로파일에서 나온 것이기 때문입니다. 1260 개의 프로필이 있고 각 프로필의 파일에 해당합니다.올해의 요일에 시간을 추가하는 방법

import numpy 
from matplotlib import pyplot as plt 
import math 
from datetime import tzinfo, timedelta, datetime, time 
import time 

i = 1 
temp = numpy.zeros((1260, 1000)) 
pressure = numpy.zeros((1260, 1000)) 
time2 = numpy.zeros(1260) 
for i in range(1, 1260): 
    filename = '/Users/ryanschubert/InternProject/itp47final/itp47grd' + str(i).zfill(4) + '.dat' 
    if os.path.isfile(filename): 
     data = open(filename, "r") 
    else: 
     continue 
    depthcounter=-1 
    text = data.read() 
    data.close() 
    text = text.replace(' ', ',') #this line and the next 5 lines are 
    text = text.replace(' ', ',') #fixing formatting errors in the code 
    text = text.replace(' ', '') 
    text = text.replace('NaN', '-98') 
    text = text.replace(',,', ',') 
    text = text.split('\n') 
    for line in text: 
     depthcounter=depthcounter+1 
     if depthcounter == 1: 
      if i ==1: 
       words4 = line.split(',') 
       year = int(words4[0]) 
       doy = float(words4[1]) - 1 
       hour = int((doy - math.floor(doy))*24) 
       t = datetime(year=year, month=1, day=1, hour=hour,tzinfo=utc) + timedelta(days=int(doy)) 
       time1 = t.timetuple().tm_yday 
       timetemp = numpy.array([t + timedelta(days=j/4.) for j in xrange(1260)]) 
      else: 
       time2[i] = timetemp[i].timetuple().tm_yday 
       print(time2[i])` 

코드는 현재 다음과 같은 값을 반환합니다. 배열 등

102 
102.25 
102.5 
102.75 
103.0 
103.25 
103.5 
103.75 
104.0 

및 삼았 보이도록

102 
102.0 
102.0 
103.0 
103.0 
103.0 
103.0 
104.0 
104.0 
104.0 
104.0 
105.0 
105.0 
105.0 
105.0 
106.0 
106.0 
106.0 
106.0 
107.0 
107.0 
107.0 
107.0 

등등 ...

나는 올해 각각 전날에 6 시간 추가 도움이 필요합니다.

+0

'i'란 무엇입니까? 이것이 함수 안에 있습니까? 그렇다면 어떻게 그 기능을 적용하고 있습니까? – roganjosh

답변

0

timedelta1/4. 일을 추가하는 대신 timedelta(hours=6)을 추가 할 수 있습니다.

그렇지 않으면 시간이 0.25 씩 증가하기를 원한다는 것을 알고 있으므로 간단히 출발 행 수열을 생성 할 수 있습니다.

내 python3 버전에서 timetuple().tm_yday은 float가 아닌 정수를 반환합니다.