Python numpy快速数组计算到二维数组(矩阵)
我有一个用例,其中我有一组数千个坐标,我想将它们矢量化,并将它们转换为距离。我想这样做,我最终得到一个二维数组,实际上是一个矩阵,也就是nxn,给我输入点之间的范数。我知道在对角线上会有一堆零,这很好。我想尽可能快地处理它 目前我的方法是采用一个numpy数组,其中x,y,z是一行,列表是从一个文件中加载多少元素,例如5000行 我目前正在循环浏览坐标列表,如下所示:Python numpy快速数组计算到二维数组(矩阵),python,arrays,list,numpy,truthtable,Python,Arrays,List,Numpy,Truthtable,我有一个用例,其中我有一组数千个坐标,我想将它们矢量化,并将它们转换为距离。我想这样做,我最终得到一个二维数组,实际上是一个矩阵,也就是nxn,给我输入点之间的范数。我知道在对角线上会有一堆零,这很好。我想尽可能快地处理它 目前我的方法是采用一个numpy数组,其中x,y,z是一行,列表是从一个文件中加载多少元素,例如5000行 我目前正在循环浏览坐标列表,如下所示: for i in range(n): for j in range(n): dist[i,j] = ro
for i in range(n):
for j in range(n):
dist[i,j] = round(numpy.linalg.norm(coords[i] - coords[j]), 3)
dist是一个numpy数组设置,带有numpy.zero((n,n))
其中我已经得到了n值,即coords列表的长度
我知道必须有一种更快的方法在这个数据集上使用numpy,使coords成为一个数组。当然,我不知道如何有效地做到这一点。我想这样做的部分原因是我打算使用一个真值表掩码来处理数据。谢谢 因此解决方案与上面提到的一样简单,只需导入scipy并使用:
distances = scipy.spatial.distance.cdist(coords, coords)
得到的数组是欧几里德范数的n×n数组。从scipy获得相同答案的另一种类似方法:
from scipy.spatial.distance import pdist, squareform
distances = squareform(pdist(coords))
似乎
pdist/cdist
-应该有帮助。