【问题标题】:Sorting a 3D numpy array using numpy.argsort throws out a puzzling result使用 numpy.argsort 对 3D numpy 数组进行排序会产生令人费解的结果
【发布时间】:2021-09-17 08:02:10
【问题描述】:

假设我有以下数组:

x = array([[[2, 5],
            [6, 7]],

           [[8, 1],
            [4, 9]]])

我想对每个子数组的第一列进行排序以获得以下结果:

out = array([[[2, 5],
              [6, 7]],

             [[4, 9],
              [8, 1]]])

所以当运行以下代码时:

x[:,x[:,:,0].argsort()]

结果是:

out1 = array([[[[2, 5],
                [6, 7]],

               [[6, 7],
                [2, 5]]],

              [[[8, 1],
                [4, 9]],

               [[4, 9],
                [8, 1]]]])

事实证明,我想要的结果在这个 2x2 矩阵的对角线上,所以我仍然可以获得想要的结果,但我不明白非对角线是什么。它们甚至看起来都没有以任何方式排序。

非对角数组从何而来?

另外,我怎样才能得到我想要的结果,而不必通过这个相当大且无用的数组 (out1)?

【问题讨论】:

  • 尝试结构化数组

标签: python arrays numpy multidimensional-array


【解决方案1】:

你需要使用advanced indexing而不是使用切片:

x[np.arange(len(x))[:,None], x[...,0].argsort()]

#[[[2 5]
#  [6 7]]

# [[4 9]
#  [8 1]]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 2014-05-25
    • 2015-01-10
    • 1970-01-01
    • 2022-09-23
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多