成对cdist用scipy代替zip

2024-04-28 20:33:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到向量列表和向量列表之间的cdist。在

换句话说,我想做[cdist(px, cent) ** 2 for px, cent in izip(pixelwise, centroids)]的等价物。在

那为什么不干脆这么做呢?因为这是我计划中最慢的部分。我想看看是否有一种在numpy/scipy中以本机方式完成这项任务的速度,比我在python中使用list expression+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)])

像素的示例值:

^{pr2}$

对于质心,你得到的结果是:

array([[[ 1.75,  2.  ,  2.5 ]],

       [[ 2.  ,  2.5 ,  2.75]],

       [[ 2.  ,  2.  ,  2.  ]]])

Tags: innumpy示例列表for方式scipy向量
1条回答
网友
1楼 · 发布于 2024-04-28 20:33:53

如果我正确地理解了你的意图,你就是在试图估计每一组向量与其他向量的质心之间的距离。如果是这样的话,看起来您缺少组中向量数量的标准化因子。尽管如此,你可以通过简单的考虑得到这个距离的一个很好的估计

scipy.spatial.distance.pdist(centroids, 'euclidean')

即质心之间的距离。这是一阶近似。如果你把这些数据用于一个算法,它可能已经足够好了,因为它可以找到最分离的向量集。在

由于注释表明您最初寻找的功能没有内置到scipy中,因此您必须独立地进行每个求和。但是,这个问题是令人尴尬的并行问题,因此使用multiprocessing可能会有所帮助。在

相关问题 更多 >