重新排列 numpy 数组的行和列(在单个操作中)

于连

首先让我们把它放在一边:我已经知道这里讨论的解决方案:通过指定行和列从另一个数组创建 NumPy 数组

假设我有一个数组

test = np.arange(12).reshape((3,4))

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

我想将其行和列重新排列为 test2

array([[ 1,  0,  3,  2],
       [ 9,  8, 11, 10],
       [ 5,  4,  7,  6]])

我现在使用的解决方案与上面链接中已经回答的解决方案相同:

test2 = test[[0,2,1]][:,[1,0,3,2]]

然而,这个解决方案创建了一个不必要的数据中间副本:它首先创建一个仅包含乱序行的副本test[[0,2,1]],然后创建一个包含乱序列的第二个副本。对于如此小的阵列,没有人关心,但如果阵列很大,则该解决方案感觉不是最佳的。numpy 是否允许行和列同时改组?看起来像test[[0,2,1],[1,0,3,2]],除了 numpy 不会那样解释这个操作......

MSeifert

是的,这就是目的np.ix_

>>> test[np.ix_([0,2,1], [1,0,3,2])]
array([[ 1,  0,  3,  2],
       [ 9,  8, 11, 10],
       [ 5,  4,  7,  6]])

它仍然会从两个输入数组创建一个中间索引数组,但它不会索引test数组两次。

请注意,np.ix_只是为您的索引数组添加维度,当您索引数组时,这些维度将被“广播”:

>>> np.ix_([0,2,1], [1,0,3,2])
(array([[0],
        [2],
        [1]]), array([[1, 0, 3, 2]]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章