python - 如何对列表中的二维数组对求和

标签 python numpy

我需要一个好的解决方案来对二维向量对进行求和。

我想对 point1 和 point2、point2 和 point3 之间的距离求和...所以这必须对所有对完成(取决于点数)

a = np.array([[1, 1],[0, 0],[7, 9]])
permutations = [((1, 1), (0, 0), (7, 9)), ((1, 1), (7, 9), (0, 0)), ((0, 0), (1, 1), (7, 9))] ....

现在,在创建所有可能的排列之后,我想对距离进行求和,以便指定总体上哪个顺序是最短的方式。 为了获得我使用的点之间的距离:

    def calcDistance(a, b):
        d = np.linalg.norm(a-b)
        return d

但我不知道如何将其应用于列表来获取每对点的距离。我尝试使用 for 循环和切片来做到这一点。

for i in range(0, len(permutations), 3):
    print(permutations[i:i+3])

作为测试,它有效,但我不知道如何对列表中的每一对应用计算函数,并再次求和以获得总距离。 排列全部存储在一个列表中,因此我的想法是检查每次迭代的 n 元素(点/向量的数量)。

最佳答案

对于 3 点数组来说不太优雅,但 einsum 计算对于计算长度/距离很有用。在这种情况下,只需使用您的输入坐标序列和之前推荐的创建点顺序的方法

import itertools

a = np.array([[1, 1],[0, 0],[7, 9]])

p0 = np.asarray(list(itertools.permutations(a, 3)))

def _cal(a):
    """Perform the calculation, mini-e_leng."""
    diff = a[:-1] - a[1:]
    return np.nansum(np.sqrt(np.einsum('ij,ij->i', diff, diff)))

[_cal(i) for i in p0]
 [12.815967813364475,
 21.40175425099138,
 11.414213562373096,
 21.40175425099138,
 11.414213562373096,
 12.815967813364475]

关于python - 如何对列表中的二维数组对求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58633210/

相关文章:

python - 使用Python和Dask计算欧氏距离

python - 如何获取字符之前的所有内容和之后的 x 数量?

python - python3.6无法安装mysqlclient接口(interface)

python - 广播从矩阵创建的子张量(Theano)

Python:如何转换列表多组数组

python - 如何避免 Numpy 类型转换?

python - 使用 QGridLayout 在 PyQt5 中进行简单聊天的 Gui

设置序列号属性的 Python 2.7 排序函数

python - 如何从 matplotlib 中的轴删除 xtics?

matlab - 来自 Matlab fft 和 Scipy fft 的 FFT 结果略有不同