对3D阵列内的2D阵列的特定列进行排序



我在3D阵列中有许多2D阵列。

让我们假设3D阵列的形状是(3,5,5(。因此,我有3个形状为(5,5(的2D阵列。

每个2D阵列中的列#4(idx为3(具有如下所示的特定值。我想将这些值替换为按降序排列的相应级别。最高值将对应于2D阵列中记录的最大数量(即形状[1](,最低值的秩为1(而不是0(。

我知道这可以通过使用NumPy的argsort((函数来实现。但我想避免的是在3D阵列中循环。你能推荐最有效的本地NumPy和无循环的替代方案吗?

谢谢!

[[[1. 0. 0.10. 0.]
[2. 0. 0. 9. 0.]
[3. 0. 0. 8. 0.]
[4. 0. 0. 7. 0.]
[5. 0. 0. 6. 0.]]
[[1. 0. 0. 199. 0.]
[2. 0. 0. 198. 0.]
[3. 0. 0. 196. 0.]
[4. 0. 0. 190. 0.]
[5. 0. 0. 160. 0.]]
[[1. 0. 0. 999. 0.]
[2. 0. 0. 870. 0.]
[3. 0. 0. 270. 0.]
[4. 0. 0. 100. 0.]
[5. 0. 0. 80. 0.]]]

我建议:

arr[:, :, 3] = arr[:, :, 3].argsort(axis=1).argsort(axis=1) + 1

注意,使用CCD_ 1两次是必要的;排名";。

最新更新