如何解决如何用另一个2D数组对3D numpy数组的每一行进行排序?
我有一个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,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]]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。