NumPy 基本切片和索引(一)

简介: ndarrays可以使用标准Python x[obj]语法对其进行索引 ,其中x是数组,obj是选择方式。有三种可用的索引:字段访问,基本切片,高级索引。究竟是哪一个取决于obj。

索引


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_i0ni<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 + rji=qk+r,因此i +(m - 1)k <ji+m1k<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'可以用来代替相同的结果。

相关文章
|
3月前
|
索引 Python
|
3月前
|
机器学习/深度学习 数据可视化 API
Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
45 3
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 9
NumPy高级索引包括整数数组索引、布尔索引及花式索引,能实现对数组元素的灵活访问与复杂操作。其中,花式索引通过整数数组指定目标轴的下标来选取元素,不同于切片,它总是返回新数组。例如,对二维数组使用倒序索引数组时,会得到指定行的新数组:[[16 17 18 19], [24 25 26 27], [28 29 30 31], [4 5 6 7]]。
35 1
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 6
NumPy高级索引包括 using 整数数组、布尔数组等来 access 数组元素, enabling 复杂的操作和 modifications. **布尔索引** uses 布尔数组 to index 目标数组, filtering 元素 based on 条件.
19 2
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 3
NumPy高级索引包括整数数组索引、布尔索引及花式索引,能访问并操作数组中的任意元素。例如,使用整数数组索引可以从多维数组中选取特定位置的元素。对于一个4x3数组`x`,通过定义行索引`rows`和列索引`cols`为`[[0,0],[3,3]]`和`[[0,2],[0,2]]`,可以获取四个角的元素:`x[rows,cols]`,结果为`[[0 2] [9 11]]`。此外,结合切片与索引数组可进一步定制数据选择,如`a[1:3, 1:3]`或`a[...,1:]`等。
27 3
|
4月前
|
索引 Python
NumPy 教程 之 NumPy 切片和索引 7
NumPy 切片和索引用于访问和修改 `ndarray` 对象。类似于 Python 的列表切片, 使用索引 `[0-n]` 和切片 `slice(start, stop, step)` 或简写为 `[start:stop:step]` 来提取元素。单个索引 `[n]` 获取单个元素, `[n:]` 获取从 `n` 开始的所有元素, `[n:m]` 获取 `n` 至 `m-1` 的元素。省略号 `...` 保持选择维度与数组一致, 如 `a[...,1]` 获取所有第二列, `a[1,...]` 获取第二行, `a[...,1:]` 获取所有第二列及之后的元素。
26 4
|
3月前
|
索引 Python
NumPy 教程 之 NumPy 高级索引 10
NumPy的高级索引功能强大,支持整数数组索引、布尔索引等多种方式,能够灵活访问和操作数组中的元素。花式索引通过整数数组选取特定位置的数据,不同于切片,它总是创建新数组。使用`np.ix_`处理多维索引时,可实现笛卡尔积效果,选取特定行与列的组合,如示例中从一个二维数组精确取出指定位置的子矩阵。
36 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
73 0
|
3月前
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
54 0
|
10天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
20 3