Source code for pygeopressure.basic.utils
# -*- coding: utf-8 -*-
"""
some utilities
"""
from __future__ import (absolute_import, division, print_function,
unicode_literals)
from builtins import range
__author__ = "yuhao"
import sys
import numpy as np
PY_VER = sys.version_info.major
if PY_VER == 2:
from functools import update_wrapper
from singledispatch import singledispatch
else:
from functools import singledispatch, update_wrapper
[docs]def rmse(measure, predict):
"""
Relative Root-Mean-Square Error
with RMS(y - y*) as nominator, and RMS(y) as denominator
"""
delta = np.sqrt(np.mean((measure - predict)**2))
denominator = np.sqrt(np.mean(measure**2))
return delta/denominator
[docs]def nmse(measure, predict):
"""
Normalized Root-Mean-Square Error
with RMS(y - y*) as nominator, and MEAN(y) as denominator
"""
delta = np.sqrt(np.mean((measure - predict)**2))
denominator = np.mean(measure)
return delta/denominator
[docs]def split_sequence(sequence, length):
"""
Split a sequence into fragments with certain length
"""
n_seq = len(sequence)
for i in range(0, n_seq, length):
yield sequence[i: i+length]
[docs]def methdispatch(func):
dispatcher = singledispatch(func)
def wrapper(*args, **kw):
return dispatcher.dispatch(args[1].__class__)(*args, **kw)
wrapper.register = dispatcher.register
update_wrapper(wrapper, func)
return wrapper
[docs]def pick_sparse(a_array, n):
"""
Pick n equally spaced samples from array
Parameters
----------
a_array : 1-d ndarray
n : int
number of samples to pick
"""
length = a_array.shape[0]
if length < n:
raise Exception("length of array smaller than n")
step = length // (n - 1)
if step == 0:
step = 1
new_list = []
for i in range(0, n, step):
new_list.append(a_array[i])
new_array = a_array[::step]
if length % (n - 1) != 0:
return np.append(new_array, [a_array[-1]])
else:
return new_array