numpy 对3D数组内的2D数组的特定列进行排序

vlurs2pr  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(158)

我在3D数组中有许多2D数组。
让我们假设3D数组的形状是(3,5,5)。因此,我有3个2D形状数组(5,5)。
每个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.]]]
g6ll5ycj

g6ll5ycj1#

我建议:

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

请注意,两次使用argsort是获得“排名”所必需的。

相关问题