我有一个包含二维点的二维numpy数组:
np.random.seed(0)
a = np.random.rand(3, 4, 2) # each value is a 2D point
我希望对每一行按照每个点的范数进行排序。
norms = np.linalg.norm(a, axis=2) # shape(3, 4)
indices = np.argsort(norms, axis=0) # indices of each sorted row
现在我想创建一个与a
相同形状和值的数组,其中每一行的2D点按其范数排序。
我该如何实现呢?
我尝试了np.take和np.take_along_axis的不同变体,但都没有成功。
例如:
np.take(a, indices, axis=1) # shape (3,3,4,2)
这个示例将 a
按照 indices
的每一行分别进行了三次采样。
我希望只对 a
进行一次采样。每一行的 indices
列标识了应该从相应的行中进行采样的列。