【发布时间】:2017-11-07 20:12:59
【问题描述】:
我正在尝试使用 numpy 及其矢量化来实现 KNN 算法。
import numpy as np
A = np.array([[11,12,13], [21,22,23], [31,32,33]])
B = np.array([[41,42,43], [51,52,53], [61,62,63]])
C = np.array([[71,72,73], [81,82,83], [91,92,93]])
X = np.array([A, B, C])
f = lambda a,b: (a-b)**2
np.sqrt(np.vectorize(f)(A, X).reshape(3,9).sum(axis=1))
# array([ 0., 90., 180.])
如果我这样使用它,我会得到一个所有向量到 A 的距离的 3x1 矩阵。
要获得所有向量之间的所有距离,我需要一个结果矩阵,如下所示:
array([[ 0., 90., 180.],
[ 90., 0., 90.],
[ 180., 90., 0.]])
如何改进操作以获得预期的结果?
【问题讨论】:
-
使用
np.vectorize有什么意义?没有它,您应该能够对数组进行减法和幂运算。该函数适用于只能用标量表示的复杂函数。 -
可以用纯python编写KNN算法。然后问如何将其重写为numpy代码。我认为哪个效果更好。
标签: python numpy knn array-broadcasting