【发布时间】:2017-05-08 17:46:14
【问题描述】:
我有以下函数,它返回一个计算最近邻的数组:
def p_batch(U,X,Y):
return [nearest(u,X,Y) for u in U]
我想用 numpy 替换 for 循环。我一直在研究 numpy.vectorize() 因为这似乎是正确的方法,但我无法让它工作。这是我迄今为止尝试过的:
def n_batch(U,X,Y):
vbatch = np.vectorize(nearest)
return vbatch(U,X,Y)
谁能告诉我哪里出错了?
编辑:
最近的实现:
def nearest(u,X,Y):
return Y[np.argmin(np.sqrt(np.sum(np.square(np.subtract(u,X)),axis=1)))]
U,X,Y 的函数(M=20,N=100,d=50):
U = numpy.random.mtrand.RandomState(123).uniform(0,1,[M,d])
X = numpy.random.mtrand.RandomState(456).uniform(0,1,[N,d])
Y = numpy.random.mtrand.RandomState(789).randint(0,2,[N])
【问题讨论】:
-
分享
nearest的实现还是从某个库/包中导入它?另外,为了性能,你可以寻找np.vectorize以外的其他方式。 -
仅当您向我们展示
nearest、U、X和Y时。 -
np.vectorize可能永远不是正确的方法。我猜KD-tree 你会更好,至少它在文档中是这样说的:“kd-tree for quick nearest-neighbor lookup” -
@Divakar 最近的实现已添加!
-
@aryamccarthy:我已经在原始问题中添加了它们!
标签: python arrays numpy vector vectorization