Untitled

mail@pastecode.io avatar
unknown
python
a year ago
839 B
5
Indexable
import numpy as np
from sklearn.metrics.pairwise import euclidean_distances
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

np.random.seed(42)
A = np.random.random((1000, 30))
A[:500,:] += 0.3
B = np.random.random((1, 30))
# A 是 1000 个样本, 每个样本 30 维
# B 是 1 个样本,同样 30 维

# 计算 B 到 A 所有样本的欧式距离 d
d = euclidean_distances(B,A)
# 找出距离最小的一个样本
idx = np.argmin(d,axis=1)

# PCA 可视化
pca = PCA(n_components = 2)
tmp = np.concatenate((A,B))
latent_pca = pca.fit_transform(tmp)
plt.figure(1, figsize = (5, 5))
plt.scatter(latent_pca[:,0] ,latent_pca[:,1] , s = 1)
plt.scatter(latent_pca[-1,0] ,latent_pca[-1,1] , s = 50) # 最后一个样本是 B 
plt.scatter(latent_pca[idx,0] ,latent_pca[idx,1] , s = 50) # 与 B 最近的样本
plt.show()