Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy快速数组计算到二维数组(矩阵)_Python_Arrays_List_Numpy_Truthtable - Fatal编程技术网

Python numpy快速数组计算到二维数组(矩阵)

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

我有一个用例,其中我有一组数千个坐标,我想将它们矢量化,并将它们转换为距离。我想这样做,我最终得到一个二维数组,实际上是一个矩阵,也就是nxn,给我输入点之间的范数。我知道在对角线上会有一堆零,这很好。我想尽可能快地处理它

目前我的方法是采用一个numpy数组,其中x,y,z是一行,列表是从一个文件中加载多少元素,例如5000行

我目前正在循环浏览坐标列表,如下所示:

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
-应该有帮助。