【发布时间】:2022-01-23 00:12:15
【问题描述】:
我之前已经做过一百万次了——根据另一个数组对一个数组进行排序。但这一次它只是稍微复杂一点,我一直很难过如何去做。让我解释。我有两个数组,比如A:
[[1.59956565 1.16421459]
[1.21548342 1.63884363]
[0.73023302 0.54681896]
[2.02628432 1.32127994]
[0.2132793 0.26559821]
[0.38242608 0.30073228]]
和B:
[[[ 0.93634073 0.35109262]
[-0.35109262 0.93634073]]
[[-0.63561769 0.77200398]
[ 0.77200398 0.63561769]]
[[ 0.8331935 0.55298155]
[-0.55298155 0.8331935 ]]
[[ 0.96691332 0.25510513]
[-0.25510513 0.96691332]]
[[-0.41372983 0.91039971]
[ 0.91039971 0.41372983]]
[[ 0.84228545 0.53903174]
[-0.53903174 0.84228545]]]
即,B 的维度比 A 的维度大 1。我想沿着最后一个轴拳疼A:
[[1.16421459 1.59956565]
[1.21548342 1.63884363]
[0.54681896 0.73023302]
[1.32127994 2.02628432]
[0.2132793 0.26559821]
[0.30073228 0.38242608]]
然后也按照这个排序对B的中轴进行排序,例如B 应该变成:
[[[-0.35109262 0.93634073]
[ 0.93634073 0.35109262]]
[[-0.63561769 0.77200398]
[ 0.77200398 0.63561769]]
[[-0.55298155 0.8331935 ]
[ 0.8331935 0.55298155]]
[[-0.25510513 0.96691332]
[ 0.96691332 0.25510513]]
[[-0.41372983 0.91039971]
[ 0.91039971 0.41372983]]
[[-0.53903174 0.84228545]
[ 0.84228545 0.53903174]]]
如何使用argsort 的A 对视图或切片执行此操作?我试过了,但没有成功,因为B 中还有一个轴。
【问题讨论】:
-
不清楚您对
A的排序应该如何影响B的排序 - 看起来B只是沿其轴之一排序? -
我已经编辑了这个问题,以便从数据中更加清楚。在
B中,它的倒数第二个维度应该按照A的最后一个维度排序。 -
很抱歉,但我仍然不清楚您对 A 的排序应该如何影响 B 的排序。您认为不是只提供数据,而是明确排序应该如何受影响,您能否准确指出 B 的所需排序在何处以及如何受到 A 的影响,以及如果您更改单个值会如何变化,例如? (目前看起来 B 是沿轴 1 排序的,但仅在第一个“列”中)
-
A具有维度 (n, 2)。B具有尺寸 (n, 2, 2)。忘记B的最后一个维度,它应该保持不变。在A中的每个 2 大小数组中,如果第一个元素大于第二个元素,则在该索引处切换数组B的中间维度。这有意义吗? -
确实如此,然后看起来@fsl 的解决方案就是您所追求的?