本文整理汇总了Python中pysal.common.KDTree类的典型用法代码示例。如果您正苦于以下问题:Python KDTree类的具体用法?Python KDTree怎么用?Python KDTree使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了KDTree类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
def __init__(self, data, threshold, p=2, alpha=-1.0, binary=True, ids=None,
build_sp=True, silent=False):
"""Casting to floats is a work around for a bug in scipy.spatial.
See detail in pysal issue #126.
"""
self.p = p
self.threshold = threshold
self.binary = binary
self.alpha = alpha
self.build_sp = build_sp
self.silent = silent
if isKDTree(data):
self.kd = data
self.data = self.kd.data
else:
if self.build_sp:
try:
data = np.asarray(data)
if data.dtype.kind != 'f':
data = data.astype(float)
self.data = data
self.kd = KDTree(self.data)
except:
raise ValueError("Could not make array from data")
else:
self.data = data
self.kd = None
self._band()
neighbors, weights = self._distance_to_W(ids)
W.__init__(self, neighbors, weights, ids, silent_island_warning=self.silent)
示例2: __init__
def __init__(self, data, threshold, p=2, alpha=-1.0, binary=True, ids=None):
"""Casting to floats is a work around for a bug in scipy.spatial.
See detail in pysal issue #126.
"""
if issubclass(type(data), scipy.spatial.KDTree):
self.kd = data
self.data = self.kd.data
else:
try:
data = np.asarray(data)
if data.dtype.kind != 'f':
data = data.astype(float)
self.data = data
self.kd = KDTree(self.data)
except:
raise ValueError("Could not make array from data")
self.p = p
self.threshold = threshold
self.binary = binary
self.alpha = alpha
self._band()
neighbors, weights = self._distance_to_W(ids)
W.__init__(self, neighbors, weights, ids)
示例3: DistanceBand
class DistanceBand(W):
"""
Spatial weights based on distance band.
Parameters
----------
data : array
(n,k) or KDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
threshold : float
distance band
p : float
Minkowski p-norm distance metric parameter:
1<=p<=infinity
2: Euclidean distance
1: Manhattan distance
binary : boolean
If true w_{ij}=1 if d_{i,j}<=threshold, otherwise w_{i,j}=0
If false wij=dij^{alpha}
alpha : float
distance decay parameter for weight (default -1.0)
if alpha is positive the weights will not decline with
distance. If binary is True, alpha is ignored
ids : list
values to use for keys of the neighbors and weights dicts
build_sp : boolean
True to build sparse distance matrix and false to build dense
distance matrix; significant speed gains may be obtained
dending on the sparsity of the of distance_matrix and
threshold that is applied
silent : boolean
By default PySAL will print a warning if the
dataset contains any disconnected observations or
islands. To silence this warning set this
parameter to True.
Attributes
----------
weights : dict
of neighbor weights keyed by observation id
neighbors : dict
of neighbors keyed by observation id
Examples
--------
>>> points=[(10, 10), (20, 10), (40, 10), (15, 20), (30, 20), (30, 30)]
>>> wcheck = pysal.W({0: [1, 3], 1: [0, 3], 2: [], 3: [0, 1], 4: [5], 5: [4]})
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w=DistanceBand(points,threshold=11.2)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> pysal.weights.util.neighbor_equality(w, wcheck)
True
>>> w=DistanceBand(points,threshold=14.2)
>>> wcheck = pysal.W({0: [1, 3], 1: [0, 3, 4], 2: [4], 3: [1, 0], 4: [5, 2, 1], 5: [4]})
>>> pysal.weights.util.neighbor_equality(w, wcheck)
True
inverse distance weights
>>> w=DistanceBand(points,threshold=11.2,binary=False)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights[0]
[0.10000000000000001, 0.089442719099991588]
>>> w.neighbors[0]
[1, 3]
>>>
gravity weights
>>> w=DistanceBand(points,threshold=11.2,binary=False,alpha=-2.)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights[0]
[0.01, 0.0079999999999999984]
Notes
-----
This was initially implemented running scipy 0.8.0dev (in epd 6.1).
earlier versions of scipy (0.7.0) have a logic bug in scipy/sparse/dok.py
so serge changed line 221 of that file on sal-dev to fix the logic bug.
"""
def __init__(self, data, threshold, p=2, alpha=-1.0, binary=True, ids=None,
build_sp=True, silent=False):
"""Casting to floats is a work around for a bug in scipy.spatial.
See detail in pysal issue #126.
#.........这里部分代码省略.........
示例4: Kernel
class Kernel(W):
"""
Spatial weights based on kernel functions.
Parameters
----------
data : array
(n,k) or KDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
bandwidth : float
or array-like (optional)
the bandwidth :math:`h_i` for the kernel.
fixed : binary
If true then :math:`h_i=h \\forall i`. If false then
bandwidth is adaptive across observations.
k : int
the number of nearest neighbors to use for determining
bandwidth. For fixed bandwidth, :math:`h_i=max(dknn) \\forall i`
where :math:`dknn` is a vector of k-nearest neighbor
distances (the distance to the kth nearest neighbor for each
observation). For adaptive bandwidths, :math:`h_i=dknn_i`
diagonal : boolean
If true, set diagonal weights = 1.0, if false (default),
diagonals weights are set to value according to kernel
function.
function : {'triangular','uniform','quadratic','quartic','gaussian'}
kernel function defined as follows with
.. math::
z_{i,j} = d_{i,j}/h_i
triangular
.. math::
K(z) = (1 - |z|) \ if |z| \le 1
uniform
.. math::
K(z) = 1/2 \ if |z| \le 1
quadratic
.. math::
K(z) = (3/4)(1-z^2) \ if |z| \le 1
quartic
.. math::
K(z) = (15/16)(1-z^2)^2 \ if |z| \le 1
gaussian
.. math::
K(z) = (2\pi)^{(-1/2)} exp(-z^2 / 2)
eps : float
adjustment to ensure knn distance range is closed on the
knnth observations
Attributes
----------
weights : dict
Dictionary keyed by id with a list of weights for each neighbor
neighbors : dict
of lists of neighbors keyed by observation id
bandwidth : array
array of bandwidths
Examples
--------
>>> points=[(10, 10), (20, 10), (40, 10), (15, 20), (30, 20), (30, 30)]
>>> kw=Kernel(points)
>>> kw.weights[0]
[1.0, 0.500000049999995, 0.4409830615267465]
>>> kw.neighbors[0]
[0, 1, 3]
>>> kw.bandwidth
array([[ 20.000002],
[ 20.000002],
[ 20.000002],
[ 20.000002],
[ 20.000002],
[ 20.000002]])
>>> kw15=Kernel(points,bandwidth=15.0)
>>> kw15[0]
{0: 1.0, 1: 0.33333333333333337, 3: 0.2546440075000701}
>>> kw15.neighbors[0]
[0, 1, 3]
#.........这里部分代码省略.........
示例5: KNN
class KNN(W):
"""
Creates nearest neighbor weights matrix based on k nearest
neighbors.
Parameters
----------
kdtree : object
PySAL KDTree or ArcKDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
k : int
number of nearest neighbors
p : float
Minkowski p-norm distance metric parameter:
1<=p<=infinity
2: Euclidean distance
1: Manhattan distance
Ignored if the KDTree is an ArcKDTree
ids : list
identifiers to attach to each observation
Returns
-------
w : W
instance
Weights object with binary weights
Examples
--------
>>> points = [(10, 10), (20, 10), (40, 10), (15, 20), (30, 20), (30, 30)]
>>> kd = pysal.cg.kdtree.KDTree(np.array(points))
>>> wnn2 = pysal.KNN(kd, 2)
>>> [1,3] == wnn2.neighbors[0]
True
ids
>>> wnn2 = KNN(kd,2)
>>> wnn2[0]
{1: 1.0, 3: 1.0}
>>> wnn2[1]
{0: 1.0, 3: 1.0}
now with 1 rather than 0 offset
>>> wnn2 = KNN(kd, 2, ids=range(1,7))
>>> wnn2[1]
{2: 1.0, 4: 1.0}
>>> wnn2[2]
{1: 1.0, 4: 1.0}
>>> 0 in wnn2.neighbors
False
Notes
-----
Ties between neighbors of equal distance are arbitrarily broken.
See Also
--------
:class:`pysal.weights.W`
"""
def __init__(self, data, k=2, p=2, ids=None, radius=None, distance_metric='euclidean'):
if isKDTree(data):
self.kdtree = data
self.data = data.data
else:
self.data = data
self.kdtree = KDTree(data, radius=radius, distance_metric=distance_metric)
self.k = k
self.p = p
this_nnq = self.kdtree.query(self.data, k=k+1, p=p)
to_weight = this_nnq[1]
if ids is None:
ids = list(range(to_weight.shape[0]))
neighbors = {}
for i,row in enumerate(to_weight):
row = row.tolist()
row.remove(i)
row = [ids[j] for j in row]
focal = ids[i]
neighbors[focal] = row
W.__init__(self, neighbors, id_order=ids)
@classmethod
def from_shapefile(cls, filepath, **kwargs):
"""
Nearest neighbor weights from a shapefile.
Parameters
----------
data : string
shapefile containing attribute data.
k : int
number of nearest neighbors
#.........这里部分代码省略.........
示例6: DistanceBand
class DistanceBand(W):
"""Spatial weights based on distance band
Parameters
----------
data : array (n,k) or KDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
threshold : float
distance band
p : float
Minkowski p-norm distance metric parameter:
1<=p<=infinity
2: Euclidean distance
1: Manhattan distance
binary : binary
If true w_{ij}=1 if d_{i,j}<=threshold, otherwise w_{i,j}=0
If false wij=dij^{alpha}
alpha : float
distance decay parameter for weight (default -1.0)
if alpha is positive the weights will not decline with
distance. If binary is True, alpha is ignored
Examples
--------
>>> points=[(10, 10), (20, 10), (40, 10), (15, 20), (30, 20), (30, 30)]
>>> w=DistanceBand(points,threshold=11.2)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights
{0: [1, 1], 1: [1, 1], 2: [], 3: [1, 1], 4: [1], 5: [1]}
>>> w.neighbors
{0: [1, 3], 1: [0, 3], 2: [], 3: [0, 1], 4: [5], 5: [4]}
>>> w=DistanceBand(points,threshold=14.2)
>>> w.weights
{0: [1, 1], 1: [1, 1, 1], 2: [1], 3: [1, 1], 4: [1, 1, 1], 5: [1]}
>>> w.neighbors
{0: [1, 3], 1: [0, 3, 4], 2: [4], 3: [0, 1], 4: [1, 2, 5], 5: [4]}
inverse distance weights
>>> w=DistanceBand(points,threshold=11.2,binary=False)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights[0]
[0.10000000000000001, 0.089442719099991588]
>>> w.neighbors[0]
[1, 3]
>>>
gravity weights
>>> w=DistanceBand(points,threshold=11.2,binary=False,alpha=-2.)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights[0]
[0.01, 0.0079999999999999984]
Notes
-----
this was initially implemented running scipy 0.8.0dev (in epd 6.1).
earlier versions of scipy (0.7.0) have a logic bug in scipy/sparse/dok.py
so serge changed line 221 of that file on sal-dev to fix the logic bug
"""
def __init__(self, data, threshold, p=2, alpha=-1.0, binary=True, ids=None):
"""
Casting to floats is a work around for a bug in scipy.spatial. See detail in pysal issue #126
"""
if issubclass(type(data), scipy.spatial.KDTree):
self.kd = data
self.data = self.kd.data
else:
try:
data = np.asarray(data)
if data.dtype.kind != 'f':
data = data.astype(float)
self.data = data
self.kd = KDTree(self.data)
except:
raise ValueError("Could not make array from data")
self.p = p
self.threshold = threshold
self.binary = binary
self.alpha = alpha
self._band()
neighbors, weights = self._distance_to_W(ids)
W.__init__(self, neighbors, weights, ids)
def _band(self):
"""
find all pairs within threshold
"""
kd = self.kd
#ns=[kd.query_ball_point(point,self.threshold) for point in self.data]
ns = kd.query_ball_tree(kd, self.threshold)
#.........这里部分代码省略.........
示例7: knnW
def knnW(data, k=2, p=2, ids=None, pct_unique=0.25):
"""
Creates nearest neighbor weights matrix based on k nearest
neighbors.
Parameters
----------
data : array (n,k) or KDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
k : int
number of nearest neighbors
p : float
Minkowski p-norm distance metric parameter:
1<=p<=infinity
2: Euclidean distance
1: Manhattan distance
ids : list
identifiers to attach to each observation
pct_unique : float
threshold percentage of unique points in data. Below this
threshold tree is built on unique values only
Returns
-------
w : W instance
Weights object with binary weights
Examples
--------
>>> x,y=np.indices((5,5))
>>> x.shape=(25,1)
>>> y.shape=(25,1)
>>> data=np.hstack([x,y])
>>> wnn2=knnW(data,k=2)
>>> wnn4=knnW(data,k=4)
>>> set([1,5,6,2]) == set(wnn4.neighbors[0])
True
>>> set([0,6,10,1]) == set(wnn4.neighbors[5])
True
>>> set([1,5]) == set(wnn2.neighbors[0])
True
>>> set([0,6]) == set(wnn2.neighbors[5])
True
>>> "%.2f"%wnn2.pct_nonzero
'0.08'
>>> wnn4.pct_nonzero
0.16
>>> wnn3e=knnW(data,p=2,k=3)
>>> set([1,5,6]) == set(wnn3e.neighbors[0])
True
>>> wnn3m=knnW(data,p=1,k=3)
>>> a = set([1,5,2])
>>> b = set([1,5,6])
>>> c = set([1,5,10])
>>> w0n = set(wnn3m.neighbors[0])
>>> a==w0n or b==w0n or c==w0n
True
ids
>>> wnn2 = knnW(data,2)
>>> wnn2[0]
{1: 1.0, 5: 1.0}
>>> wnn2[1]
{0: 1.0, 2: 1.0}
now with 1 rather than 0 offset
>>> wnn2 = knnW(data,2, ids = range(1,26))
>>> wnn2[1]
{2: 1.0, 6: 1.0}
>>> wnn2[2]
{1: 1.0, 3: 1.0}
>>> 0 in wnn2.neighbors
False
Notes
-----
Ties between neighbors of equal distance are arbitrarily broken.
See Also
--------
pysal.weights.W
"""
if issubclass(type(data), scipy.spatial.KDTree):
kd = data
data = kd.data
nnq = kd.query(data, k=k+1, p=p)
info = nnq[1]
elif type(data).__name__ == 'ndarray':
# check if unique points are a small fraction of all points
ind = np.lexsort(data.T)
u = data[np.concatenate(([True],np.any(data[ind[1:]]!=data[ind[:-1]],axis=1)))]
#.........这里部分代码省略.........
示例8: DistanceBand
class DistanceBand(W):
"""
Spatial weights based on distance band.
Parameters
----------
data : array
(n,k) or KDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
threshold : float
distance band
p : float
Minkowski p-norm distance metric parameter:
1<=p<=infinity
2: Euclidean distance
1: Manhattan distance
binary : boolean
If true w_{ij}=1 if d_{i,j}<=threshold, otherwise w_{i,j}=0
If false wij=dij^{alpha}
alpha : float
distance decay parameter for weight (default -1.0)
if alpha is positive the weights will not decline with
distance. If binary is True, alpha is ignored
ids : list
values to use for keys of the neighbors and weights dicts
Examples
--------
>>> points=[(10, 10), (20, 10), (40, 10), (15, 20), (30, 20), (30, 30)]
>>> w=DistanceBand(points,threshold=11.2)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights
{0: [1, 1], 1: [1, 1], 2: [], 3: [1, 1], 4: [1], 5: [1]}
>>> w.neighbors
{0: [1, 3], 1: [0, 3], 2: [], 3: [1, 0], 4: [5], 5: [4]}
>>> w=DistanceBand(points,threshold=14.2)
>>> w.weights
{0: [1, 1], 1: [1, 1, 1], 2: [1], 3: [1, 1], 4: [1, 1, 1], 5: [1]}
>>> w.neighbors
{0: [1, 3], 1: [0, 3, 4], 2: [4], 3: [1, 0], 4: [5, 1, 2], 5: [4]}
inverse distance weights
>>> w=DistanceBand(points,threshold=11.2,binary=False)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights[0]
[0.10000000000000001, 0.089442719099991588]
>>> w.neighbors[0]
[1, 3]
>>>
gravity weights
>>> w=DistanceBand(points,threshold=11.2,binary=False,alpha=-2.)
WARNING: there is one disconnected observation (no neighbors)
Island id: [2]
>>> w.weights[0]
[0.01, 0.0079999999999999984]
Notes
-----
This was initially implemented running scipy 0.8.0dev (in epd 6.1).
earlier versions of scipy (0.7.0) have a logic bug in scipy/sparse/dok.py
so serge changed line 221 of that file on sal-dev to fix the logic bug.
"""
def __init__(self, data, threshold, p=2, alpha=-1.0, binary=True, ids=None):
"""Casting to floats is a work around for a bug in scipy.spatial.
See detail in pysal issue #126.
"""
if issubclass(type(data), scipy.spatial.KDTree):
self.kd = data
self.data = self.kd.data
else:
try:
data = np.asarray(data)
if data.dtype.kind != 'f':
data = data.astype(float)
self.data = data
self.kd = KDTree(self.data)
except:
raise ValueError("Could not make array from data")
self.p = p
self.threshold = threshold
self.binary = binary
self.alpha = alpha
self._band()
neighbors, weights = self._distance_to_W(ids)
W.__init__(self, neighbors, weights, ids)
#.........这里部分代码省略.........
示例9: knnW
def knnW(data, k=2, p=2, ids=None):
"""
Creates nearest neighbor weights matrix based on k nearest
neighbors.
Parameters
----------
kdtree : object
PySAL KDTree or ArcKDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
k : int
number of nearest neighbors
p : float
Minkowski p-norm distance metric parameter:
1<=p<=infinity
2: Euclidean distance
1: Manhattan distance
Ignored if the KDTree is an ArcKDTree
ids : list
identifiers to attach to each observation
Returns
-------
w : W
instance
Weights object with binary weights
Examples
--------
>>> points = [(10, 10), (20, 10), (40, 10), (15, 20), (30, 20), (30, 30)]
>>> kd = pysal.cg.kdtree.KDTree(np.array(points))
>>> wnn2 = pysal.knnW(kd, 2)
>>> [1,3] == wnn2.neighbors[0]
True
ids
>>> wnn2 = knnW(kd,2)
>>> wnn2[0]
{1: 1.0, 3: 1.0}
>>> wnn2[1]
{0: 1.0, 3: 1.0}
now with 1 rather than 0 offset
>>> wnn2 = knnW(kd, 2, ids=range(1,7))
>>> wnn2[1]
{2: 1.0, 4: 1.0}
>>> wnn2[2]
{1: 1.0, 4: 1.0}
>>> 0 in wnn2.neighbors
False
Notes
-----
Ties between neighbors of equal distance are arbitrarily broken.
See Also
--------
pysal.weights.W
"""
if isKDTree(data):
kdt = data
data = kdt.data
else:
kdt = KDTree(data)
nnq = kdt.query(data, k=k+1, p=p)
info = nnq[1]
neighbors = {}
for i, row in enumerate(info):
row = row.tolist()
if i in row:
row.remove(i)
focal = i
if ids:
row = [ ids[j] for j in row]
focal = ids[i]
neighbors[focal] = row
return pysal.weights.W(neighbors, id_order=ids)
示例10: Kernel
class Kernel(W):
def __init__(self, data, bandwidth=None, fixed=True, k=2,
function='triangular', eps=1.0000001, ids=None,
diagonal=False, ncores=1):
if issubclass(type(data), scipy.spatial.KDTree):
self.kdt = data
self.data = self.kdt.data
data = self.data
else:
self.data = data
self.kdt = KDTree(self.data)
self.k = k + 1
self.function = function.lower()
self.fixed = fixed
self.eps = eps
self.ncores = ncores
if bandwidth:
try:
bandwidth = np.array(bandwidth)
bandwidth.shape = (len(bandwidth), 1)
except:
bandwidth = np.ones((len(data), 1), 'float') * bandwidth
self.bandwidth = bandwidth
else:
self._set_bw()
self._eval_kernel()
neighbors, weights = self._k_to_W(ids)
if diagonal:
for i in neighbors:
weights[i][neighbors[i].index(i)] = 1.0
W.__init__(self, neighbors, weights, ids)
def _k_to_W(self, ids=None):
allneighbors = {}
weights = {}
if ids:
ids = np.array(ids)
else:
ids = np.arange(len(self.data))
for i, neighbors in enumerate(self.kernel):
if len(self.neigh[i]) == 0:
allneighbors[ids[i]] = []
weights[ids[i]] = []
else:
allneighbors[ids[i]] = list(ids[self.neigh[i]])
weights[ids[i]] = self.kernel[i].tolist()
return allneighbors, weights
def _set_bw(self):
dmat, neigh = self.kdt.query(self.data, k=self.k)
if self.fixed:
# use max knn distance as bandwidth
bandwidth = dmat.max() * self.eps
n = len(dmat)
self.bandwidth = np.ones((n, 1), 'float') * bandwidth
else:
# use local max knn distance
self.bandwidth = dmat.max(axis=1) * self.eps
self.bandwidth.shape = (self.bandwidth.size, 1)
# identify knn neighbors for each point
nnq = self.kdt.query(self.data, k=self.k)
self.neigh = nnq[1]
def _eval_kernel(self):
t1 = time.time()
# get points within bandwidth distance of each point
kdtbq = self.kdt.query_ball_point
kdtq = self.kdt.query
bw = self.bandwidth
if self.ncores > 1:
pool = mp.Pool(processes=self.ncores, initializer=loadkd, initargs=(kdtbq,kdtq,bw))
if not hasattr(self, 'neigh'):
if self.ncores > 1:
neighbors = pool.map(bqwrapper,self.data, chunksize = len(self.bandwidth) / self.ncores)
else:
neighbors = [kdtbq(self.data[i], r=bwi[0]) for i,
bwi in enumerate(self.bandwidth)]
self.neigh = neighbors
t2 = time.time()
print "Ball Point Query took {} seconds.".format(t2 - t1)
# get distances for neighbors
bw = self.bandwidth
#kdtq = self.kdt.query
z = []
t1 = time.time()
if self.ncores > 1:
iterable = [(i,nids, self.data[i]) for i, nids in enumerate(self.neigh)]
z = pool.map(qwrapper, iterable)
else:
for i, nids in enumerate(self.neigh):
di, ni = kdtq(self.data[i], k=len(nids))
zi = np.array([dict(zip(ni, di))[nid] for nid in nids]) / bw[i]
z.append(zi)
t2 = time.time()
print "Local query took: {} seconds".format(t2 - t1)
zs = z
# functions follow Anselin and Rey (2010) table 5.4
#.........这里部分代码省略.........
示例11: Kernel
class Kernel(W):
"""Spatial weights based on kernel functions
Parameters
----------
data : array (n,k) or KDTree where KDtree.data is array (n,k)
n observations on k characteristics used to measure
distances between the n objects
bandwidth : float or array-like (optional)
the bandwidth :math:`h_i` for the kernel.
fixed : binary
If true then :math:`h_i=h \\forall i`. If false then
bandwidth is adaptive across observations.
k : int
the number of nearest neighbors to use for determining
bandwidth. For fixed bandwidth, :math:`h_i=max(dknn) \\forall i`
where :math:`dknn` is a vector of k-nearest neighbor
distances (the distance to the kth nearest neighbor for each
observation). For adaptive bandwidths, :math:`h_i=dknn_i`
diagonal : boolean
If true, set diagonal weights = 1.0, if false (default),
diagonals weights are set to value according to kernel
function.
function : string {'triangular','uniform','quadratic','quartic','gaussian'}
kernel function defined as follows with
.. math::
z_{i,j} = d_{i,j}/h_i
triangular
.. math::
K(z) = (1 - |z|) \ if |z| \le 1
uniform
.. math::
K(z) = 1/2 \ if |z| \le 1
quadratic
.. math::
K(z) = (3/4)(1-z^2) \ if |z| \le 1
quartic
.. math::
K(z) = (15/16)(1-z^2)^2 \ if |z| \le 1
gaussian
.. math::
K(z) = (2\pi)^{(-1/2)} exp(-z^2 / 2)
eps : float
adjustment to ensure knn distance range is closed on the
knnth observations
Examples
--------
>>> points=[(10, 10), (20, 10), (40, 10), (15, 20), (30, 20), (30, 30)]
>>> kw=Kernel(points)
>>> kw.weights[0]
[1.0, 0.500000049999995, 0.4409830615267465]
>>> kw.neighbors[0]
[0, 1, 3]
>>> kw.bandwidth
array([[ 20.000002],
[ 20.000002],
[ 20.000002],
[ 20.000002],
[ 20.000002],
[ 20.000002]])
>>> kw15=Kernel(points,bandwidth=15.0)
>>> kw15[0]
{0: 1.0, 1: 0.33333333333333337, 3: 0.2546440075000701}
>>> kw15.neighbors[0]
[0, 1, 3]
>>> kw15.bandwidth
array([[ 15.],
[ 15.],
[ 15.],
[ 15.],
[ 15.],
[ 15.]])
Adaptive bandwidths user specified
>>> bw=[25.0,15.0,25.0,16.0,14.5,25.0]
>>> kwa=Kernel(points,bandwidth=bw)
>>> kwa.weights[0]
[1.0, 0.6, 0.552786404500042, 0.10557280900008403]
#.........这里部分代码省略.........