Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 整数数组索引在numpy中是如何工作的?_Python_Arrays_Numpy_Indexing - Fatal编程技术网

Python 整数数组索引在numpy中是如何工作的?

Python 整数数组索引在numpy中是如何工作的?,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,我无法理解numpy中的整数数组索引 >>> x = np.array([[1, 2], [3, 4], [5, 6]]) >>> x[[0, 1, 2], [0, 1, 0]] array([1, 4, 5]) 请给我解释一下这是怎么回事 x[[0,1,2],[0,1,0]] [0,1,2] [0,1,2] 由于第一个索引列表和第二个索引列表的大小匹配,因此它们的值将配对以从x中选择元素。我将用列表索引来说明: In [78]: x[[0, 1, 2]

我无法理解numpy中的整数数组索引

>>> x = np.array([[1, 2], [3, 4], [5, 6]])
>>> x[[0, 1, 2], [0, 1, 0]]
array([1, 4, 5])
请给我解释一下这是怎么回事

x[[0,1,2],[0,1,0]] 
[0,1,2]
[0,1,2]
由于第一个索引列表和第二个索引列表的大小匹配,因此它们的值将配对以从
x
中选择元素。我将用列表索引来说明:

In [78]: x[[0, 1, 2], [0, 1, 0]]
Out[78]: array([1, 4, 5])
In [79]: list(zip([0, 1, 2], [0, 1, 0]))
Out[79]: [(0, 0), (1, 1), (2, 0)]
In [80]: [x[i,j] for i,j in zip([0, 1, 2], [0, 1, 0])]
Out[80]: [1, 4, 5]
或者更明确地说,它以1d数组的形式返回
x[0,0]
x[1,1]
x[2,0]
。另一种方式是,您分别从3行中选择了
[0,1,0]
元素

由于第一个索引列表和第二个索引列表的大小匹配,因此它们的值将配对以从
x
中选择元素。我将用列表索引来说明:

In [78]: x[[0, 1, 2], [0, 1, 0]]
Out[78]: array([1, 4, 5])
In [79]: list(zip([0, 1, 2], [0, 1, 0]))
Out[79]: [(0, 0), (1, 1), (2, 0)]
In [80]: [x[i,j] for i,j in zip([0, 1, 2], [0, 1, 0])]
Out[80]: [1, 4, 5]

或者更明确地说,它以1d数组的形式返回
x[0,0]
x[1,1]
x[2,0]
。另一种思考方式是,您分别从3行中选择了
[0,1,0]
元素

In [179]: x = np.array([[1, 2], [3, 4], [5, 6]])                                                                     

In [180]: x                                                                                                          
Out[180]: 
array([[1, 2],
       [3, 4],
       [5, 6]])
假设我们要从该矩阵中选择
1
4
5
。因此,第0行的第0列、第1行的第1列和第2行的第0列。现在,为索引提供两个数组(矩阵的每个维度一个),在这些数组中,我们先填充行,然后填充我们感兴趣的列:

In [181]: rows = np.array([0, 1, 2])                                                                                 

In [182]: cols = np.array([0, 1, 0])                                                                                 

In [183]: x[rows, cols]                                                                                              
Out[183]: array([1, 4, 5])

我发现最容易理解如下:

In [179]: x = np.array([[1, 2], [3, 4], [5, 6]])                                                                     

In [180]: x                                                                                                          
Out[180]: 
array([[1, 2],
       [3, 4],
       [5, 6]])
假设我们要从该矩阵中选择
1
4
5
。因此,第0行的第0列、第1行的第1列和第2行的第0列。现在,为索引提供两个数组(矩阵的每个维度一个),在这些数组中,我们先填充行,然后填充我们感兴趣的列:

In [181]: rows = np.array([0, 1, 2])                                                                                 

In [182]: cols = np.array([0, 1, 0])                                                                                 

In [183]: x[rows, cols]                                                                                              
Out[183]: array([1, 4, 5])
从文档中的“在这种情况下,如果索引数组具有匹配的形状,并且每个被索引数组的维度都有一个索引数组,则生成的数组具有与索引数组相同的形状,并且值对应于索引数组中每个位置的索引集。”在这种情况下,如果索引数组有一个匹配的形状,并且被索引数组的每个维度都有一个索引数组,则结果数组的形状与索引数组的形状相同,并且值对应于索引数组中每个位置的索引集