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),并且要选择由选择的行构成的子阵列1和3及列0和3。您可以使用 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)
这基本上是从a行array([[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 对多维数组使用高级索引的方式。