【发布时间】:2017-08-05 06:14:10
【问题描述】:
我有一个包含 n 行(观察)和 p 列(特征)的数据集:
import numpy as np
from scipy.spatial.distance import pdist, squareform
p = 3
n = 5
xOld = np.random.rand(n * p).reshape([n, p])
我有兴趣在真正具有 n x (n-1)/2 唯一值的 nxn 矩阵中获取这些点之间的距离
sq_dists = pdist(xOld, 'sqeuclidean')
D_n = squareform(sq_dists)
现在假设我收到了N 的其他观察结果并想更新D_n。一种非常低效的方法是:
N = 3
xNew = np.random.rand(N * p).reshape([N, p])
sq_dists = pdist(np.row_stack([xOld, xNew]), 'sqeuclidean')
D_n_N = squareform(sq_dists)
但是,考虑到 n ~ 10000 和 N ~ 100,这将是多余的。我的目标是使用D_n 更有效地获得D_n_N。为了做到这一点,我将 D_n_N 划分如下。我已经有D_n 并且可以计算B [N x N]。但是,我想知道是否有一种好方法可以在没有一堆 for 循环的情况下计算 A(或 A 转置)并最终构造 D_n_N
D_n (n x n) A [n x N]
A.T [N x n] B [N x N]
提前致谢。
【问题讨论】:
标签: python arrays numpy scipy euclidean-distance