直观地解释这个 4D numpy 数组索引

问题描述 投票:0回答:3
x = np.random.randn(4, 3, 3, 2)
print(x[1,1])

output:
[[ 1.68158825 -0.03701415]
[ 1.0907524  -1.94530359]
[ 0.25659178  0.00475093]]

我是Python新手。我无法真正理解上面那样的 4 维数组索引。 x[1,1] 是什么意思?

例如,对于向量

a = [[2][3][8][9]], a[0] = 2, a[3] = 9. 

我明白了,但我不知道 x[1,1] 指的是什么。

请详细说明。谢谢。

python arrays numpy
3个回答
71
投票

二维数组是一个矩阵:数组的数组。

4D 数组基本上是矩阵的矩阵:

matrix of matrices

指定一个索引将为您提供一组矩阵:

>>> x[1]
array([[[-0.37387191, -0.19582887],
        [-2.88810217, -0.8249608 ],
        [-0.46763329,  1.18628611]],

       [[-1.52766397, -0.2922034 ],
        [ 0.27643125, -0.87816021],
        [-0.49936658,  0.84011388]],

       [[ 0.41885001,  0.16037164],
        [ 1.21510322,  0.01923682],
        [ 0.96039904, -0.22761806]]])

enter image description here

指定两个索引即可得到一个矩阵:

>>> x[1, 1]
array([[-1.52766397, -0.2922034 ],
       [ 0.27643125, -0.87816021],
       [-0.49936658,  0.84011388]])

enter image description here

指定三个索引会给你一个数组:

>>> x[1, 1, 1]
array([ 0.27643125, -0.87816021])

enter image description here

指定四个索引将为您提供一个元素:

>>> x[1, 1, 1, 1]
-0.87816021212791107

enter image description here

x[1,1]
为您提供保存在大矩阵第二行第二列中的小矩阵。


7
投票

4d numpy 数组是嵌套 4 层深的数组,因此在顶层它看起来像这样:

[ # 1st level Array (Outer)
    [ # 2nd level Array
        [[1, 2], [3, 4]], # 3rd level arrays, containing 2 4th level arrays
        [[5, 6], [7, 8]]
    ], 
    [ # 2nd Level array
        [[9, 10], [11, 12]], 
        [[13, 14], [15, 16]]
    ]
]

x[1,1]
扩展为
x[1][1]
,让我们一次解压这个表达式,第一个表达式
x[1]
从全局数组中选择第一个元素,它是之前数组中的以下对象:

[
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
]

下一个表达式现在看起来像这样:

[
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
][1]

因此评估(选择数组中的第一个元素)给出以下结果:

[[1, 2], [3, 4]]

如您所见,在 4d 数组中选择一个元素会得到一个 3d 数组,从 3d 数组中选择一个元素会得到一个 2d 数组,从 2d 数组中选择一个元素会得到一个 1d 数组。


0
投票

这样想,它是数组的数组的数组的数组......

1 维数组就像一个列表 (a, b, c, d, ...)

2维数组是一维数组的数组。 使用的索引可以认为是一维数组的数量,例如,TwoD[1,2]指的是第二个一维数组,一维中的第三个。

3维数组是2D数组的数组

4维数组是3维数组的数组,依此类推。

让我们考虑一个 5 维数组,将其命名为

FiveD
。 那什么是
FiveD[1,2,3,4,5]

注意索引从 0 开始计数,因此

FiveD[1,2,3,4,5]
是 4D 数组的第 2 个、3D 数组的第 3 个、2D 数组的第 4 个、1D 数组的第 5 个、1D 数组的第 6 个元素最后一个一维数组。

如果我错了请纠正我。

© www.soinside.com 2019 - 2024. All rights reserved.