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

时间:2017-11-06 18:25:43

标签: python arrays numpy

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-D数组索引。 x [1,1]是什么意思?

例如,对于vector

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

我得到了这个,但我不知道x [1,1]指的是什么。

请详细说明。谢谢。

3 个答案:

答案 0 :(得分:6)

2D数组是一个矩阵:数组数组。

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]为您提供保存在大矩阵第二行第二列中的小矩阵。

答案 1 :(得分:2)

一个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数组中选择一个元素给出一个二维数组,从二维数组中选择一个元素给我们一个数组。

答案 2 :(得分:0)

此页面以非常清晰的类比说明了高维数组的概念,并提供了一些插图。我建议那些正在寻找该问题答案的人

https://cognitiveclass.ai/blog/nested-lists-multidimensional-numpy-arrays