Changed the place of index_to_slices to more logical place

This commit is contained in:
Siivola Eero 2018-09-03 18:38:21 +03:00
parent 0c6438608d
commit 0b5e8d895e
9 changed files with 35 additions and 34 deletions

View file

@ -2,7 +2,7 @@
# Licensed under the BSD 3-clause license (see LICENSE.txt)
from .kern import Kern
from .independent_outputs import index_to_slices
from GPy.util.multioutput import index_to_slices
from ...core.parameterization import Param
from paramz.transformations import Logexp
import numpy as np

View file

@ -5,7 +5,7 @@ from .kern import Kern
from ...core.parameterization import Param
from paramz.transformations import Logexp
import numpy as np
from .independent_outputs import index_to_slices
from GPy.util.multioutput import index_to_slices
class ODE_UYC(Kern):
def __init__(self, input_dim, variance_U=3., variance_Y=1., lengthscale_U=1., lengthscale_Y=1., ubias =1. ,active_dims=None, name='ode_uyc'):

View file

@ -4,7 +4,7 @@ from .kern import Kern
from ...core.parameterization import Param
from paramz.transformations import Logexp
import numpy as np
from .independent_outputs import index_to_slices
from GPy.util.multioutput import index_to_slices
class ODE_st(Kern):

View file

@ -2,7 +2,7 @@ from .kern import Kern
from ...core.parameterization import Param
from paramz.transformations import Logexp
import numpy as np
from .independent_outputs import index_to_slices
from GPy.util.multioutput import index_to_slices
class ODE_t(Kern):

View file

@ -5,34 +5,8 @@
from .kern import CombinationKernel
import numpy as np
import itertools
from GPy.util.multioutput import index_to_slices
def index_to_slices(index):
"""
take a numpy array of integers (index) and return a nested list of slices such that the slices describe the start, stop points for each integer in the index.
e.g.
>>> index = np.asarray([0,0,0,1,1,1,2,2,2])
returns
>>> [[slice(0,3,None)],[slice(3,6,None)],[slice(6,9,None)]]
or, a more complicated example
>>> index = np.asarray([0,0,1,1,0,2,2,2,1,1])
returns
>>> [[slice(0,2,None),slice(4,5,None)],[slice(2,4,None),slice(8,10,None)],[slice(5,8,None)]]
"""
if len(index)==0:
return[]
#contruct the return structure
ind = np.asarray(index,dtype=np.int)
ret = [[] for i in range(ind.max()+1)]
#find the switchpoints
ind_ = np.hstack((ind,ind[0]+ind[-1]+1))
switchpoints = np.nonzero(ind_ - np.roll(ind_,+1))[0]
[ret[ind_i].append(slice(*indexes_i)) for ind_i,indexes_i in zip(ind[switchpoints[:-1]],zip(switchpoints,switchpoints[1:]))]
return ret
class IndependentOutputs(CombinationKernel):
"""

View file

@ -1,7 +1,7 @@
from .kern import Kern, CombinationKernel
import numpy as np
from functools import reduce, partial
from .independent_outputs import index_to_slices
from GPy.util.multioutput import index_to_slices
from paramz.caching import Cache_this
class ZeroKern(Kern):

View file

@ -4,7 +4,7 @@ A new kernel
import numpy as np
from .kern import Kern, CombinationKernel
from .independent_outputs import index_to_slices
from GPy.util.multioutput import index_to_slices
import itertools
class DEtime(Kern):

View file

@ -14,7 +14,7 @@ from .gaussian import Gaussian
from ..core.parameterization import Param
from paramz.transformations import Logexp
from ..core.parameterization import Parameterized
from ..kern.src.independent_outputs import index_to_slices
from GPy.util.multioutput import index_to_slices
import itertools
class MultioutputLikelihood(MixedNoise):

View file

@ -2,6 +2,33 @@ import numpy as np
import warnings
import GPy
def index_to_slices(index):
"""
take a numpy array of integers (index) and return a nested list of slices such that the slices describe the start, stop points for each integer in the index.
e.g.
>>> index = np.asarray([0,0,0,1,1,1,2,2,2])
returns
>>> [[slice(0,3,None)],[slice(3,6,None)],[slice(6,9,None)]]
or, a more complicated example
>>> index = np.asarray([0,0,1,1,0,2,2,2,1,1])
returns
>>> [[slice(0,2,None),slice(4,5,None)],[slice(2,4,None),slice(8,10,None)],[slice(5,8,None)]]
"""
if len(index)==0:
return[]
#contruct the return structure
ind = np.asarray(index,dtype=np.int)
ret = [[] for i in range(ind.max()+1)]
#find the switchpoints
ind_ = np.hstack((ind,ind[0]+ind[-1]+1))
switchpoints = np.nonzero(ind_ - np.roll(ind_,+1))[0]
[ret[ind_i].append(slice(*indexes_i)) for ind_i,indexes_i in zip(ind[switchpoints[:-1]],zip(switchpoints,switchpoints[1:]))]
return ret
def get_slices(input_list):
num_outputs = len(input_list)