繁体   English   中英

Numpy数组索引与索引

[英]Numpy array indexing with indices

我写了以下内容:

arr3=np.array([[[1,2,3],[1,2,3],[1,2,3],[1,2,3]],[[2,2,3],[4,2,3],[4,2,2],[2,2,2]],[[1,1,1],[1,1,1],[1,1,1],[1,1,1]]])

正如我所料,
arr3[0:3,1]应该返回相同的结果
arr3[0:3][1]array([[2, 2, 3],[4, 2, 3],[4, 2, 2],[2, 2, 2]]) arr3[0:3][1] array([[2, 2, 3],[4, 2, 3],[4, 2, 2],[2, 2, 2]])

但它返回: array([[1, 2, 3],[4, 2, 3],[1, 1, 1]])

顺便说一下,我在Jupyter笔记本中使用python3

在执行arr3[0:3,1] ,您将从第一个axis中的0:3获取元素,然后在第一个element获取每个element

这给出了一个不同的结果取0:3与在第一轴线arr3[0:3]然后以第一array从该axis

所以在这种情况下, 0:3部分在任何一种情况下都不起作用,因为array's形状是(3, 4, 3)所以取first 3只是给你回到相同的array 在第二种情况下,这绝对没有任何作用,但在第一种情况下,它确实充当了占位符,以便您可以访问第二个axis ,但为此您应该只使用冒号: [:, some_index]

看看它的array怎样的?

>>> arr3[0:3]
array([[[1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3]],

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

       [[1, 1, 1],
        [1, 1, 1],
        [1, 1, 1],
        [1, 1, 1]]])

但是当你执行arr3[:, 1]你从array第二个 axis获取第二个元素,这样就可以得到:

array([[1, 2, 3],
       [4, 2, 3],
       [1, 1, 1]])

而在另一种情况下,你从数组的第一个 axis获取第二个元素,所以:

array([[2, 2, 3],
       [4, 2, 3],
       [4, 2, 2],
       [2, 2, 2]])

要进一步阅读有关numpy indexing ,请查看this page on scipy上的this page on scipy

请注意这个直接适用于您的问题的具体描述:

当索引中至少有一个切片(:) ,省略号(...)np.newaxis (或者数组的维度多于高级索引)时,行为可能会更复杂。 这就像连接每个高级索引元素的索引结果一样

让我们看看我们的多维numpy数组:

import numpy as np
arr3=np.array([
    [
        [1,2,3],[1,2,3],[1,2,3],[1,2,3]
    ],[
        [2,2,3],[4,2,3],[4,2,2],[2,2,2]
    ],[
        [1,1,1],[1,1,1],[1,1,1],[1,1,1]
    ]
])
print(arr3[0:3,1])

返回:

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

这是有道理的,因为我们正在获取行号1到3,我们只抓取第一列。

但是, arr3[0:3][1]将数组从第0行返回到第3行,然后选择第二行(或行索引1)。

注意:

print(arr3[0:3])

返回:

[[[1 2 3]
  [1 2 3]
  [1 2 3]
  [1 2 3]]

 [[2 2 3]
  [4 2 3]
  [4 2 2]
  [2 2 2]]

 [[1 1 1]
  [1 1 1]
  [1 1 1]
  [1 1 1]]] 

它返回一个新数组(恰好与我们当前的数组相同,因为我们只询问了数组中的所有行)。 然后我们要求第二行:

print(arr3[0:3][1])

返回:

[[2 2 3]
 [4 2 3]
 [4 2 2]
 [2 2 2]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM