baiyanlali-zhao's picture
init
eaf2e33
raw
history blame
1.32 kB
import numpy as np
from scipy.stats import entropy
def a_clip(v, g, r=1.0):
return min(r, 1 - abs(v - g) / g)
def jsdiv(p, q):
return (entropy(p, p + q, base=2) + entropy(q, p + q, base=2)) / 2
def grid_cnt(data, ranges, n_grids=10, normalize=True):
eps = 1e-10
d = data.shape[1]
res = np.zeros([n_grids] * d)
itvs = (ranges[:, 1] - ranges[:, 0]) * ((1 + eps) / n_grids)
for item in data:
indexes = tuple((item // itvs))
res[indexes] = res[indexes] + 1
if normalize:
res /= res.size
return res
def crowdivs(distmat, inner=False):
mat = np.array(distmat)
m, n = mat
if inner and m == n:
vmax = np.max(mat)
return np.min(mat + np.identity(n) * vmax, axis=1).sum() / n ** 0.5
return np.min(mat, axis=1).sum() / m
def lpdist_mat(X, Y, p=2):
diff = np.abs(np.expand_dims(X, axis=1) - np.expand_dims(Y, axis=0))
distance_matrix = np.sum(diff ** p, axis=-1) ** (1 / p)
return distance_matrix
def linfdist_mat(X, Y):
diff = np.abs(np.expand_dims(X, axis=1) - np.expand_dims(Y, axis=0))
distance_matrix = np.max(diff, axis=-1)
return distance_matrix
if __name__ == '__main__':
x = [[1, 0], [0, 1], [3, -1]]
print(lpdist_mat(x, x, 1))
print(lpdist_mat(x, x, 2))
print(linfdist_mat(x, x))