gpt4 book ai didi

python - 如何通过另一个二维数组对 3D numpy 数组的每一行进行排序?

转载 作者:行者123 更新时间:2023-12-05 02:48:56 25 4
gpt4 key购买 nike

我有一个 2D 点的 2D 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 进行了 3 次采样,一次针对 indices 中的每一行。我只想对 a 进行一次采样。 indices 中的每一行都有应从相应行中采样的列。

最佳答案

如果我没理解错的话,你想要这个:

norms = np.linalg.norm(a,axis=2) # shape(3,4)
indices = np.argsort(norms , axis=1)
np.take_along_axis(a, indices[:,:,None], axis=1)

示例输出:

[[[0.4236548  0.64589411]
[0.60276338 0.54488318]
[0.5488135 0.71518937]
[0.43758721 0.891773 ]]

[[0.07103606 0.0871293 ]
[0.79172504 0.52889492]
[0.96366276 0.38344152]
[0.56804456 0.92559664]]

[[0.0202184 0.83261985]
[0.46147936 0.78052918]
[0.77815675 0.87001215]
[0.97861834 0.79915856]]]

关于python - 如何通过另一个二维数组对 3D numpy 数组的每一行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64235838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com