numpy.ix_() 函数有什么作用,输出用于什么?

Sun*_*ear 1 python arrays indexing numpy numpy-ndarray

下面显示了numpy.ix_()函数的输出。输出有什么用?它的结构非常独特。

import numpy as np

>>> gfg = np.ix_([1, 2, 3, 4, 5, 6], [11, 12, 13, 14, 15, 16], [21, 22, 23, 24, 25, 26], [31, 32, 33, 34, 35, 36] )
>>> gfg
(array([[[[1]]],


       [[[2]]],


       [[[3]]],


       [[[4]]],


       [[[5]]],


       [[[6]]]]), array([[[[11]],

        [[12]],

        [[13]],

        [[14]],

        [[15]],

        [[16]]]]), array([[[[21],
         [22],
         [23],
         [24],
         [25],
         [26]]]]), array([[[[31, 32, 33, 34, 35, 36]]]]))
Run Code Online (Sandbox Code Playgroud)

Ehs*_*san 10

根据numpy 文档

从多个序列构建一个开放网格。此函数采用 N 个一维序列并返回 N 个输出,每个输出具有 N 维,因此形状在除一维之外的所有维度中都是 1,并且具有非单位形状值的维度在所有 N 维中循环。使用 ix_one 可以快速构造索引数组来索引叉积。a[np.ix_([1,3],[2,5])] 返回数组 [[a[1,2] a[1,5]], [a[3,2] a[3,5] ]]]。

numpy.ix_()的主要用途是创建一个开放网格,以便我们可以使用它从数组(特定子数组)中选择特定索引。一个容易理解的例子是:

说你有形状的2D阵列(5,5),并且要选择由选择的行构成的子阵列13及列03。您可以使用 np.ix_来创建(索引)网格,以便能够在下面的示例中选择子数组:

a = np.arange(5*5).reshape(5,5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]

sub_indices = np.ix_([1,3],[0,3])
(array([[1],
       [3]]), array([[0, 3]]))

a[sub_indices]
[[ 5  8]
 [15 18]]
Run Code Online (Sandbox Code Playgroud)

这基本上是从aarray([[1],[3]])和列中选择的子数组array([[0, 3]])

 col 0    col 3
   |        |
   v        v
[[ 0  1  2  3  4]   
 [ 5  6  7  8  9]   <- row 1
 [10 11 12 13 14]
 [15 16 17 18 19]   <- row 3
 [20 21 22 23 24]]
Run Code Online (Sandbox Code Playgroud)

请注意,在 的输出中np.ix_,为您提供给的 N 个一维输入索引返回的 N 数组的返回np.ix_方式是,第一个用于行,第二个用于列,第三个用于深度,依此类推. 这就是为什么在上面的例子中,array([[1],[3]])用于行和array([[0, 3]])用于列。问题中提供的示例 OP 也是如此。其背后的原因是 numpy 对多维数组使用高级索引的方式。

  • 感谢您出色的简化解释。我了解该功能的用途以及如何使用它。;) (2认同)