【发布时间】:2014-04-11 02:55:15
【问题描述】:
我想在向量列表和每个向量的centroids 列表之间获取cdist。
换句话说,我想做相当于[cdist(px, cent) ** 2 for px, cent in izip(pixelwise, centroids)]。
那么为什么不这样做呢?因为它是我程序中最慢的部分。我想看看是否有一种方法可以在 numpy/scipy 中进行本地操作,这比我在 python 中使用列表表达式 + zip 的方法更快。
示例代码:
pixelwise = allframes.transpose((1, 0, 2))
centroids = pixelwise.mean((0,)).reshape((pixelwise.shape[0], 1, 3))
variances += weight * numpy.sum(
[cdist(px, cent, 'euclidean') ** 2 for px, cent in izip(pixelwise, centroids)])
pixelwise 的示例值:
array([[[1, 1, 2],
[2, 3, 4],
[2, 2, 2]],
[[1, 2, 3],
[2, 3, 4],
[2, 2, 2]],
[[1, 2, 3],
[2, 1, 1],
[2, 2, 2]],
[[4, 3, 2],
[2, 3, 2],
[2, 2, 2]]])
以及给定像素级值的质心:
array([[[ 1.75, 2. , 2.5 ]],
[[ 2. , 2.5 , 2.75]],
[[ 2. , 2. , 2. ]]])
【问题讨论】:
-
我不认为现在有一种简单的方法可以做到这一点。我正在研究this,它将向
scipy.spatial.distance添加可以做到这一点的功能,但我认为它要等到scipy 0.15(当前版本是0.13,0.14 即将发布)才能准备好。
标签: python numpy matrix scipy linear-algebra