Python 使用NumPy argsort和take-in二维数组
目的是计算两组点(Python 使用NumPy argsort和take-in二维数组,python,arrays,sorting,numpy,distance,Python,Arrays,Sorting,Numpy,Distance,目的是计算两组点(set1和set2)之间的距离矩阵,使用argsort()获得排序索引,并使用take()提取排序数组。我知道我可以直接进行sort(),但我需要索引来进行下一步 我正在使用花式索引。我无法将take()直接用于获得的索引矩阵,但在每一行中添加一个相应的数量使其工作,因为take()将源数组展平,使第二行元素具有索引+=len(set2)、第三行索引+=2*len(set2)等等(见下文): 主要问题是:有没有一种直接的方法可以使用take()而不求这些索引的和 要使用的数据:
set1
和set2
)之间的距离矩阵,使用argsort()
获得排序索引,并使用take()
提取排序数组。我知道我可以直接进行sort()
,但我需要索引来进行下一步
我正在使用花式索引。我无法将take()
直接用于获得的索引矩阵,但在每一行中添加一个相应的数量使其工作,因为take()
将源数组展平,使第二行元素具有索引+=len(set2)、第三行索引+=2*len(set2)等等(见下文):
主要问题是:有没有一种直接的方法可以使用take()
而不求这些索引的和
要使用的数据:
set1 = np.array([[ 250., 0., 0.],
[ 250., 0., 510.],
[-250., 0., 0.],
[-250., 0., 0.]])
set2 = np.array([[ 61.0, 243.1, 8.3],
[ -43.6, 246.8, 8.4],
[ 102.5, 228.8, 8.4],
[ 69.5, 240.9, 8.4],
[ 133.4, 212.2, 8.4],
[ -52.3, 245.1, 8.4],
[-125.8, 216.8, 8.5],
[-154.9, 197.1, 8.6],
[ 61.0, 243.1, 8.7],
[ -26.2, 249.3, 8.7]])
其他相关问题:
我认为没有一种方法可以使用
np。在不使用平面索引的情况下使用。由于维度可能会发生变化,因此最好使用np.ravel\u multi\u index
这样做:
a = np.argsort(dist, axis=1)
a = np.ravel_multi_index((np.arange(dist.shape[0])[:, None], a), dims=dist.shape)
或者,您可以使用奇特的索引,而不使用take
:
s2 = dist[np.arange(4)[:, None], a]
截至2018年5月,存在np。沿轴取
s2 = np.take_along_axis(dist, a, axis=1)
s2 = np.take_along_axis(dist, a, axis=1)