Мой код включает модуль segyio. Мой документ .sgy, который мне нужно обработать, содержит 107591 трасс и 2501 значений на трассу в формате "float32". Я должен обработать входной файл sgy и написать новый обработанный файл sgy. Как я могу ускорить мой код? Может быть, мне стоит использовать jit или Cython, но я не знаю как. Время расчета этого кода около 4-5 часов, это так долго.
...
> import segyio
> import statistics
> import numpy as np
> import time
> start_time = time.time()
> z=int(input('How many traces would you have to change? '))
> T=int(input('Choose the size of window for averaging '))
> z1=list(range(z))
> t1=int(T//4)
> t=T-t1-t1
> print('Taken into calculation', t, 'values')
> t11 = len(range(t1))
> t0 = ([0.0] * t11)
> c=np.arange(0, 2502-t)
> d=np.arange(t, 2502)
> z2=iter(z1)
> traces=[]
> print ('Precycle', "--- %s seconds ---" % (time.time() - start_time))
> with segyio.open('2M.sgy', 'r') as f:
> f.mmap()
> for i in z1:
> full=[]
> e=[]
> z3 = next(z2)
> a=f.trace[z3]
> c1 = iter(c)
> d1 = iter(d)
> for i in d:
> c00 = next(c1)
> d00 = next(d1)
> e00 = statistics.mean(a[c00:d00])
> e.append(e00)
> full.extend(t0)
> full.extend(e)
> full.extend(t0)
> full=np.array([full], 'float32')
> traces.append(full)
> print('Changed trace', z3, "--- %s seconds ---" % (time.time() - start_time))
> print('Calculation before writing', "--- %s seconds ---" % (time.time() - start_time))
> spec=segyio.spec()
> spec.sorting=f.sorting
> spec.format=f.format
> spec.samples=f.samples
> spec.ilines=f.ilines
> spec.xline=f.xlines
> spec.tracecount=f.tracecount
> with segyio.create('2M2.sgy', spec) as dst:
> dst.mmap()
> dst.text[0]= f.text[0]
> dst.bin=f.bin
> dst.header=f.header
> dst.trace=traces
> dst.close()
> print('End', 'Full calculation time', "--- %s seconds ---" % (time.time() - start_time))
...