Python学习 Day69 numpy元素操作 01

numpy元素操作

一、切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组

在这里插入图片描述
在这里插入图片描述

冒号 : 的解释

  • 如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项
    在这里插入图片描述
    切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray

在这里插入图片描述


二、高级索引

NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引

1.整数数组索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.布尔索引

在这里插入图片描述
在这里插入图片描述


三、广播

是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行

形状相同

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a+b 的结果就是 a 与 b 数组对应位相加。这要求维数相同,且各维度的长度相同

在这里插入图片描述
形状不同

如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
广播的规则

  • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐
  • 输出数组的形状是输入数组形状的各个维度上的最大值
  • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错
  • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值

简单理解

对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足

  • 数组拥有相同形状
  • 当前维度的值相等
  • 当前维度的值有一个是 1

若条件不满足:抛出 “ValueError: frames are not aligned” 异常


四、迭代

numpy.nditer基本使用

它是一个有效的多维迭代器对象,可以用在数组上进行迭代。 数组的每个元素可使用 Python 的标准Iterator接口来访问

基本使用
在这里插入图片描述

  • 不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)
  • 反映了默认情况下只需访问每个元素,而无需考虑其特定顺序
  • 可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比

在这里插入图片描述
在这里插入图片描述

控制遍历顺序

顺序 说明 使用方式
Fortran order 列序优先 for x in np.nditer(a, order='F')
C order 行序优先 for x in np.nditer(a.T, order='C')

在这里插入图片描述
在这里插入图片描述
显式设置,来强制 nditer 对象使用某种顺序
在这里插入图片描述
修改数组的值

nditer对象有另一个可选参数op_flags。 其默认值为只读,但可以设置为读写或只写模式。 这将允许使用此迭代器修改数组元素

在这里插入图片描述
外部循环

nditer类的构造器拥有flags参数,它可以接受下列值

说明
c_index 可以跟踪 C 顺序的索引
f_index 可以跟踪 Fortran 顺序的索引
multi-index 每次迭代可以跟踪一种索引类型
external_loop 给出的值是具有多个值的一维数组,而不是零维数组

迭代器遍历对应于每列的一维数组

在这里插入图片描述
广播迭代

如果两个数组是可广播的,nditer组合对象能够同时迭代它们。 假设数组a具有维度 3X4,并且存在维度为 1X4 的另一个数组b,则使用以下类型的迭代器(数组b被广播到a的大小)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ShengXIABai/article/details/121175003