NumPy 学习笔记

NumPy

优点

NumPy 可以很便捷高效地处理大量数据,使用 NumPy 做数据处理的优点如下:

NumPy 是 Python 科学计算基础库

NumPy 可以对数组进行高效的数学运算

NumPy 的 ndarray 对象可以用来构建多维数组

NumPy 能够执行傅立叶变换与重塑多维数组形状

NumPy 提供了线性代数,以及随机数生成的内置函数

安装

安装镜像

pip install numpy -i Simple Index

array创建对象

通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:

numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)

案例

引入:import numpy as np

reshape数组变维

reshape() 函数允许你在不改变数组数据的情况下,改变数组的维度。

reshape() 返回的是一个新的数组,原数组不会被修改。reshape() 可以用于多维数组,例如将一个一维数组重塑为二维数组。

元素总数必须匹配:新形状中的元素总数必须与原数组中的元素总数相同。

-1 作为占位符:你可以使用 -1 作为占位符,让 numpy 自动计算某个维度的大小。

reshape() 还可以将一维数组重塑为三维数组

结果

数据类型

NumPy 提供了比 Python 更加丰富的数据类型,如下所示:

数据类型对象

数据类型对象(Data Type Object)又称 dtype 对象,是用来描述与数组对应的内存区域如何使用。

可以在创建数组时指定 dtype 参数来定义数组中元素的数据类型。

数据类型标识码

NumPy 中每种数据类型都有一个唯一标识的字符码,int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替,如下所示:

以下是 NumPy 中常见的数据类型标识码及其对应的详细列表:

说明:

在编程中,字节序标记用于指定数据的字节顺序。常见的字节序标记包括:

<: 小端序,数据的最低有效字节存储在内存的最低地址,而最高有效字节存储在内存的最高地址。

>: 大端序,数据的最高有效字节存储在内存的最低地址,而最低有效字节存储在内存的最高地址。

数组属性

shape

返回一个元组,元组中的每个元素表示数组在对应维度上的大小。元组的长度等于数组的维度数。

shape 属性功能:

未传入参数,返回一个由数组维度构成的元组

传入参数,可以用来调整数组维度的大小

如果使用shape属性修改数组的形状,则修改的是原数组的形状,reshape修改数组的形状会返回一个新数组,不修改原数组的形状。

ndim

ndim 属性功能:

返回的是数组的维数

itemsize

itemsize 属性功能:

返回数组中每个元素的大小(以字节为单位)

flags

flags 属性功能:

返回 ndarray 数组的内存信息

说明:


C_CONTIGUOUS:
表示数组在内存中是 C 风格连续的(行优先)。
如果为 True,则数组是 C 风格连续的。

F_CONTIGUOUS:
表示数组在内存中是 Fortran 风格连续的(列优先)。
如果为 True,则数组是 Fortran 风格连续的。

OWNDATA:
表示数组是否拥有自己的数据。
如果为 True,则数组拥有自己的数据;如果为 False,则数组可能是从另一个数组或对象借用数据的。

WRITEABLE:
表示数组是否可写。
如果为 True,则数组是可写的;如果为 False,则数组是只读的。

ALIGNED:
表示数组是否对齐。
如果为 True,则数组的数据在内存中是对齐的。

WRITEBACKIFCOPY:
表示数组是否是通过 np.copy 创建的副本,并且需要将更改写回原始数组。
如果为 True,则数组是通过 np.copy 创建的副本,并且需要将更改写回原始数组。

UPDATEIFCOPY:
表示数组是否是通过 np.copy 创建的副本,并且需要将更改写回原始数组。
如果为 True,则数组是通过 np.copy 创建的副本,并且需要将更改写回原始数组。

创建数组的其他方法

empty()

empty() 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组(数组元素为随机值)

格式:
numpy.empty(shape, dtype = float, order = 'C')

zeros()

创建指定大小的数组,数组元素以 0 来填充

格式:
numpy.zeros(shape, dtype = float, order = 'C')

ones()

创建指定形状的数组,数组元素以 1 来填充

格式:
numpy.ones(shape, dtype = None, order = 'C')

结果

arange()

arange() 函数用于创建一个等差数列的数组。它类似于 Python 内置的 range() 函数,但返回的是一个 NumPy 数组而不是一个列表。

格式:
numpy.arange(start, stop, step, dtype)

根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。

注意:

arange创建一个数组
np.arange(start,stop,step),start默认为0,step默认为1
数组终止值不包含stop
step为正数,stop要比start大,step为负数,stop要比start小,否则生成空数组

linspace

在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份

格式:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

linespace:将指定start和stop的数值平均分成“num”分,在生成一维数组
stop是终止值,
 start 默认为0
 num是平均分的份数默认为50,
 endpoint :为True,数组包含终止值,为False,不包含终止值
 计算公式,理解为endpoint为Ture,步长为(stop-start)/num-1,,endpoint为False,步长为:(stop-start)/num

结果

切片

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

slice()

在 Python 中,slice 可以作为一个对象来使用。你可以创建一个 slice 对象,然后使用它来获取序列的片段。

参数:

start 是切片开始的位置(包含该位置)。

stop 是切片结束的位置(不包含该位置)。

step 是切片的步长,即选取元素的间隔。

冒号 : 的作用

表示范围: 冒号用于表示一个范围。例如,array[1:3] 表示从索引 1 到索引 3(不包括 3)的元素。

表示所有元素: 单独使用冒号表示所有元素。例如,array[:, 1] 表示所有行的第 1 列。

步长: 双冒号后面可以跟一个步长值,表示每隔多少个元素取一个。例如,array[::2] 表示每隔一个元素取一个。

注:冒号对于一维数组按索引号截取,二维数组按行和列截取。

省略号 ... 的作用

表示所有维度: 省略号用于表示数组的所有维度。例如,array[..., 1] 表示取所有行的第 1 列。

简化多维切片: 在多维数组中,省略号可以简化切片操作,避免显式地写出所有维度的索引。

高级索引

NumPy 中的高级索引指的是使用整数数组、布尔数组或者其他序列来访问数组的元素。相比于基本索引,高级索引可以访问到数组中的任意元素,并且可以用来对数组进行复杂的操作和修改。

整数数组索引

整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。

布尔索引

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

逻辑运算符:

& | ~:与或非

结果:

广播

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。这要求维数相同,且各维度的长度相同,如果不相同,可以通过广播机制,这种机制的核心是对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度。

广播规则

维度匹配:如果两个数组的维度数不同,维度数较少的数组会在前面补上长度为 1 的维度。

长度匹配:如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为 1,则该数组会沿着该维度进行广播。

不匹配:如果两个数组在某个维度上的长度既不相同也不为 1,则广播失败,抛出 ValueError。

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值