Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 使用2D数组索引一维Numpy数组_Python_Python 3.x_Numpy_Numpy Indexing - Fatal编程技术网

Python 使用2D数组索引一维Numpy数组

Python 使用2D数组索引一维Numpy数组,python,python-3.x,numpy,numpy-indexing,Python,Python 3.x,Numpy,Numpy Indexing,在Numpy中,我们可以使用2D数组作为一维数组的索引吗?什么数组索引规则适用于以下代码 # 1D array arr = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # 2D index indx = np.array([[2, 4], [6, 8]]) # 2D index in 1D array arr[indx] # Output of above indexing is a 2D array! array([[2,

在Numpy中,我们可以使用2D数组作为一维数组的索引吗?什么数组索引规则适用于以下代码

# 1D array
arr = np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 2D index 
indx = np.array([[2, 4], [6, 8]])

# 2D index in 1D array
arr[indx]

# Output of above indexing is a 2D array!
array([[2, 4],[6, 8]])
什么数组索引规则适用于以下代码

# 1D array
arr = np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 2D index 
indx = np.array([[2, 4], [6, 8]])

# 2D index in 1D array
arr[indx]

# Output of above indexing is a 2D array!
array([[2, 4],[6, 8]])
这就是numpy的高级索引工作原理。结果数组的形状与索引数组的形状、数组的形状以及通过索引的轴有关。下面是一些将3D数组作为索引传递到具有不同形状的数组的第一轴的示例

In [47]: a.shape
Out[47]: (2, 5)

In [48]: b = a[np.array([[[0],[1]],[[1],[1]]])]

In [49]: b.shape
Out[49]: (2, 2, 1, 5)

In [50]: arr.shape
Out[50]: (3, 3, 3)

In [51]: b = arr[np.array([[[0],[1]],[[1],[1]]])]

In [52]: b.shape
Out[52]: (2, 2, 1, 3, 3)
下面是将不同数组传递到不同轴时得到的结果:

In [61]: b = arr[[[0],[2]],[[1],[0]]]

In [62]: b.shape
Out[62]: (2, 1, 3)

In [63]: arr.shape
Out[63]: (3, 3, 3)
在所有这些索引中,Numpy将检查多个内容,首先,它检查作为索引传递的对象的类型。其次,它将索引数组的形状与数组各自轴的形状进行比较。第三,检查结果是否生成有效的Numpy数组

以下是一些其他示例:

In [64]: b = arr[[[[0],[2]]],[[1],[0]]]

In [65]: b.shape
Out[65]: (1, 2, 1, 3)

In [66]: b
Out[66]: 
array([[[[ 3,  4,  5]],

        [[18, 19, 20]]]])

In [67]: b = arr[[[[0],[2]]],[1],[0]]

In [68]: b
Out[68]: 
array([[[ 3],
        [21]]])

In [69]: b = arr[[[['a'],[2]]],[1],[0]]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-69-dba030ba9787> in <module>()
----> 1 b = arr[[[['a'],[2]]],[1],[0]]

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

In [70]: b = arr[[[[0],[2]]],[1],0]

In [71]: b = arr[[[[0],[2]]],[5],0]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-71-0962012e570a> in <module>()
----> 1 b = arr[[[[0],[2]]],[5],0]

IndexError: index 5 is out of bounds for axis 1 with size 3

In [72]: 

In [72]: b = arr[[[[0],[[2]]]],[5],0]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-72-9a520b0cb30e> in <module>()
----> 1 b = arr[[[[0],[[2]]]],[5],0]

ValueError: setting an array element with a sequence.

In [73]: b = arr[[[[0],[[2]]]],[5],[0]]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-73-67187db6f452> in <module>()
----> 1 b = arr[[[[0],[[2]]]],[5],[0]]

ValueError: setting an array element with a sequence.
[64]中的
:b=arr[[[0],[2]],[[1],[0]]
In[65]:b.形状
Out[65]:(1,2,1,3)
在[66]中:
出[66]:
数组([[3,4,5]],
[[18, 19, 20]]]])
在[67]:b=arr[[[0],[2]],[1],[0]]
在[68]中:
出[68]:
数组([[3],
[21]]])
在[69]:b=arr[['a'],[2]],[1],[0]]
---------------------------------------------------------------------------
索引器回溯(最后一次最近调用)
在()
---->1 b=arr['a'],[2]],[1],[0]]
索引器错误:只有整数、片(`:`)、省略号(`…`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引
在[70]:b=arr[[[0],[2]],[1],0]
在[71]:b=arr[[[0],[2]],[5],0]
---------------------------------------------------------------------------
索引器回溯(最后一次最近调用)
在()
---->1 b=arr[[[0],[2]],[5],0]
索引器:索引5超出大小为3的轴1的界限
在[72]中:
在[72]:b=arr[[[0],[2]]],[5],0]
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1 b=arr[[[0],[2]]],[5],0]
ValueError:使用序列设置数组元素。
在[73]:b=arr[[[0],[2]]],[5],[0]]
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1 b=arr[[[0],[2]]],[5],[0]]
ValueError:使用序列设置数组元素。

你能确切地阐明你的意思吗?您发布的代码工作正常,是的,您可以使用2D数组对1D数组进行索引。我在numpy文档中找不到规则,您能给我指一下讨论这种索引类型的相关文档吗。我知道这是可行的,但我想了解原因。From:“与列表和元组不同,numpy数组支持多维数组的多维索引。”但它是如何实现的还不太清楚。这正是我想了解的。从实验中可以看出,可以使用N维数组索引1D数组。输出将是一个N维数组,前提是索引在1D数组的范围内。我非常确定,只要数组元素是原始数组的有效索引(在本例中为整数0..9),就可以将任何大小和形状的数组作为索引。谢谢,从上面我可以得出结论,只要索引数组元素在要索引的数组的边界内,我们就会得到有效的输出。输出的形状是索引数组的形状,索引数组的轴被索引数组的形状所取代。例如,索引数组形状,indx=(x1,x2,…xn),要索引的数组形状,arr=(y1,y2…ym)。arr轴“k”上indx阵列的输出形状=(y1,y2…yk-1,x1,x2,…,xn,…yk,yk+1,,,,ym)。@user8579809有点像,但不完全。你不能像这样简单地确定结果的形状,因为有多个案例,它们会根据多个规则生成结果(但类似)。解决这一问题的最佳方法是在不同的形状中使用不同的数组和索引。