Python 带索引的Numpy数组索引

Python 带索引的Numpy数组索引,python,python-3.x,numpy,Python,Python 3.x,Numpy,我写了以下内容: 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]:数组([2,2,3],[4,2,3],[4,2,2],[2,2,2]]) 但是它返回:数组([[1,2,3],[4,2,3],[1,1,1]]) 顺便说一句,我在Jupy

我写了以下内容:

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]
数组([2,2,3],[4,2,3],[4,2,2],[2,2,2]])

但是它返回:
数组([[1,2,3],[4,2,3],[1,1,1]])


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

当执行
arr3[0:3,1]
时,您从第一个
轴中的
0:3
获取元素,然后为每个轴获取第一个
元素

这将给出一个不同的结果,即使用
arr3[0:3]
在第一个轴上取
0:3
,然后从此
轴上取第一个
数组

因此,在本例中,
0:3
部分在这两种情况下都不起作用,因为
数组的
形状是
(3,4,3)
,所以先取
3
只会返回相同的
数组
。在第二种情况下,这完全不起任何作用,但在第一种情况下,它实际上是一个占位符,因此您可以访问第二个
,但为此,您只需使用冒号:
[:,一些索引]

查看它是如何与
数组
相同的

>>> 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([[1, 2, 3],
       [4, 2, 3],
       [1, 1, 1]])
而在另一种情况下,从数组的第一个
获取第二个元素,因此:

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

要进一步了解
numpy
索引
,请查看

请注意此直接适用于您的问题的特定描述:

如果索引中至少有一个切片
(:)
、省略号
(…)
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]]] 
[[2 2 3]
 [4 2 3]
 [4 2 2]
 [2 2 2]]
它返回一个新数组(恰好与当前数组相同,因为我们只要求数组中的所有行)。然后我们问第二行:

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

[[[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]]] 
[[2 2 3]
 [4 2 3]
 [4 2 2]
 [2 2 2]]

@kylechan请
接受
(回答旁边的灰色勾号)并
向上投票
,如果您还没有投票!我第一次使用stackoverflow。谢谢你的邀请patient@kylechan没问题,对于新用户来说,这是一个措辞很好的问题:)