Page MenuHomec4science

variogram.pyx
No OneTemporary

File Metadata

Created
Thu, Jun 6, 14:59

variogram.pyx

from cython cimport wraparound, boundscheck
from libc.math cimport pow, sqrt
from libc.stdio cimport printf
@wraparound(False)
@boundscheck(False)
def cvar(int ia, int ja, long npt,
double[:, :] array,
unsigned char[:, :] mask,
unsigned char[:, :, :, :] computed,
double degree,
double[:] dist, double[:] varg):
cdef long n
cdef int ii, jj, i, j
cdef double idist, jdist
n = 0
for ii in range(ia):
printf("Computing variogram: %.1f\%\n", 100.0 * n / npt)
for jj in range(ja):
if mask[ii, jj]:
continue
else:
for i in range(ia):
for j in range(ja):
if mask[i, j] or (computed[ii, jj, i, j] != 0):
continue
else:
idist = ii - i
jdist = jj - j
dist[n] = sqrt(idist*idist + jdist*jdist)
# Avoid repetitions
if dist[n] == 0:
continue
varg[n] = 0.5 * pow(array[i, j] - array[ii, jj], degree)
computed[ii, jj, i, j] = 1
computed[i, j, ii, jj] = 1
n += 1
# If we filled up all combinations return
if n >= npt:
return

Event Timeline