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'可以用来代替相同的结果。

相关文章
|
16天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
16天前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
1月前
|
存储 索引 Python
NumPy 数组创建方法与索引访问详解
NumPy 的 `ndarray` 是其核心数据结构,可通过 `array()`、`zeros()`、`ones()` 和 `empty()` 函数创建。`array()` 可以将列表等转换为数组;`zeros()` 和 `ones()` 生成全零或全一数组;`empty()` 创建未定义值的数组。此外,还有 `arange()`、`linspace()`、`eye()` 和 `diag()` 等特殊函数。练习包括使用这些函数创建特定数组。
131 1
|
1月前
|
存储 数据挖掘 vr&ar
深入探索Numpy--索引,切片,随机数,文本操作等
深入探索Numpy--索引,切片,随机数,文本操作等
|
1月前
|
机器学习/深度学习 计算机视觉 索引
NumPy索引与切片的高级技巧探索
【4月更文挑战第17天】探索NumPy的高级索引与切片技巧:整数数组、布尔和花式索引用于灵活选取元素;切片步长、反转及多维切片操作实现高效数组处理。在数据分析、图像处理和机器学习等领域有广泛应用,提升代码效率与可读性。
|
1月前
|
数据处理 计算机视觉 索引
NumPy中的布尔索引与花式索引详解
【4月更文挑战第17天】本文介绍了NumPy中的布尔索引和花式索引,这两种高级索引方式增强了数组操作的灵活性。布尔索引利用布尔数组过滤数据,如`array[bool_array]`用于根据条件筛选元素;在数据分析中,这对条件筛选非常有用。花式索引包括切片、数组和元组索引,允许非整数位置访问元素。例如,数组索引`array[index_array]`按指定位置选取元素,元组索引适用于多维数组的选择。掌握这两种索引能提升数组数据处理的效率。
|
1月前
|
存储 索引 Python
NumPy 数组切片及数据类型介绍
了解 NumPy 数组切片,用于从数组中提取子集。一维数组切片使用 `start:end:step`,如 `arr[1:5]`。二维数组切片如 `arr[1:3, 0:3]`。创建 5x5 数组并练习切片,例如打印第一行、第二列、对角线元素和 2x2 子数组。别忘了检查数据类型,如 `arr.dtype`,并使用 `astype()` 转换类型。
48 0
|
1月前
|
存储 机器学习/深度学习 数据处理
NumPy:从初识到实战,探索Python科学计算的无限可能
NumPy:从初识到实战,探索Python科学计算的无限可能
45 0
|
1月前
|
程序员 开发工具 索引
图解Python numpy基本操作
图解Python numpy基本操作
|
12天前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
34 5