索引
ndarrays可以使用标准Python x[obj]
语法对其进行索引 ,其中x
是数组,obj
是选择方式。有三种可用的索引:字段访问,基本切片,高级索引。究竟是哪一个取决于obj
。
注意在Python中,x[(exp1, exp2, ..., expN)]
相当于x[exp1, exp2, ..., expN];
后者只是前者的语法糖。
基本切片和索引
基本切片将 Python 的切片基本概念扩展到 N 维。当obj
是一个slice对象(由括号内的start:stop:step
符号构造)、整数或切片对象和整数的元组时,会发生基本切片。也包括省略号(三个点)和newaxis对象。
从版本1.15.0开始不推荐使用:为了保持向后兼容Numeric
中的常见用法,如果选择对象是包含 slice 对象、省略号,或 newaxis 对象的任何非 nararray 和非元组序列(例如 list),则也会启动基本切片,但不适用于整数数组或其他嵌入序列。
使用 N 个整数进行索引的最简单情况返回表示相应项的数组标量。正如在 Python 中,所有下标是从零开始:对我个索引你,取值范围为0 \le n_i < d_i0≤ni<di其中d_i是 我的阵列的形状的个元素。负指数被解释为从数组的末尾开始计数(即,如果 n_i <0,则意味着n_i + d_i)。
基本切片生成的所有数组始终 是原始数组的视图。
序列切片的标准规则适用于基于每维的基本切片(包括使用步骤索引)。要记住的一些有用的概念包括:
基本切片语法是i:j:k其中我是起始索引, j是停止索引,并且ķ是步骤k \neq 0k=0。这将选择米元件(在对应的尺寸)与索引值我,i,i+k,...,1 +(m - 1)k, 其中m = q +(r \ neq0)m=q+(rneq0)和 q 和 r 是通过j-i 除 k 所获得的商和余数:j - i = qk + rj−i=qk+r,因此i +(m - 1)k <ji+(m−1)k<j。
例
>>> >>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> x[1:7:2] array([1, 3, 5])
负i和j被解释为n + i和n + j,其中 n是相应维度中的元素数量。负k使得踩踏指向更小的指数。
例
>>> >>> x[-2:10] array([8, 9]) >>> x[-3:3:-1] array([7, 6, 5, 4])
假设n是要切片的维度中的元素数。然后,如果我没有给出其默认值为0 K> 0和 N - 1为ķ<0 。如果没有给出j,则对于k> 0 ,默认为n ; 对于k <0,默认为-n-1。如果没有给出k,则默认为1.注意, 与此相同,表示沿此轴选择所有索引。:::
例
>>> >>> x[5:] array([5, 6, 7, 8, 9])
如果选择元组中的对象数小于 N,则:假定任何后续维。
例
>>> >>> x = np.array([[[1],[2],[3]], [[4],[5],[6]]]) >>> x.shape (2, 3, 1) >>> x[1:2] array([[[4], [5], [6]]])
Ellipsis扩展为:制作与长度相同的选择元组所需的对象数x.ndim。可能只存在一个省略号。
例
>>> >>> x[...,0] array([[1, 2, 3], [4, 5, 6]])
newaxis选择元组中的每个对象用于将所得选择的维度扩展一个单位长度维度。添加的维度是newaxis 对象在选择元组中的位置。
例
>>> >>> x[:,np.newaxis,:,:].shape (2, 1, 3, 1)
整数i返回相同的值,i:i+1 除了返回的对象的维度减少1.特别是,具有第p个元素的整数(和所有其他条目:)的选择元组返回具有维度的相应子数组N - 1。如果N = 1, 则返回的对象是数组标量。Scalars中解释了这些对象。
如果选择元组具有:除作为切片对象的第p个条目之外的 所有条目i:j:k,则返回的数组具有通过连接由元素i,i + k,...,i +的整数索引返回的子数组形成的维N. m - 1)k <j,
:切片元组中具有多个非条目的基本切片,就像使用单个非:条目重复应用切片一样,其中:连续地获取非条目(所有其他非:条目被替换:)。因此, 在基本切片下的x[ind1,...,ind2,:]行为xind1。
警告
对于高级索引,上述情况并非如此。
您可以使用切片来设置数组中的值,但是(与列表不同)您永远不会增长数组。要设置的值的大小 必须(可广播)为与其相同的形状 。x[obj] = valuex[obj]
注意
请记住,切片元组总是可以构造为obj 并在x[obj]符号中使用。可以在构造中使用切片对象来代替[start:stop:step] 符号。例如,x[1:10:5,::-1]也可以实现为。这对于构造适用于任意维数组的通用代码非常有用。obj = (slice(1,10,5), slice(None,None,-1)); x[obj]
numpy.newaxis
该newaxis对象可用于所有切片操作,以创建长度为1的轴。newaxis是'None'的别名,'None'可以用来代替相同的结果。