Python 第三方库 NumPy:
- NumPy 的全称是“ Numeric Python”,它是 Python 的第三方扩展包,主要用来计算、处理一维或多维数组
- 在数组算术计算方面, NumPy 提供了大量的数学函数
- NumPy 的底层主要用 C语言编写,因此它能够高速地执行数值计算
- NumPy 还提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上
1 ndarray:
NumPy 定义了一个 n 维数组对象,简称 ndarray 对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有大小相同的内存块,您可以使用索引或切片的方式获取数组中的每个元素。
ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列,常用的布局方式有两种,即按行或者按列。
主要特点
- 多维数组:ndarray 可以表示任意维度的数组,包括一维、二维、三维等。
- 同质数据类型:ndarray 中的所有元素必须是相同的数据类型。
- 高效内存布局:ndarray 在内存中是连续存储的,这使得数组的访问和操作非常高效。
- 丰富的功能和方法:ndarray 提供了丰富的数学函数和操作,如矩阵运算、线性代数、傅里叶变换等。
使用方式:
- ndarray 是通过 array 函数或其他 NumPy 函数(如 zeros、ones、arange 等)创建的。
- array 函数接受一个序列作为输入,并返回一个 ndarray 对象。
1.1 array创建对象:
通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:
numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)
参数说明:
| 序号 | 参数 | 描述说明 |
|---|---|---|
| 1 | object | 表示一个数组序列 |
| 2 | dtype | 可选参数,通过它可以更改数组的数据类型 |
| 3 | copy | 可选参数,表示数组能否被复制,默认是 True |
| 4 | order | 以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认) |
| 5 | ndmin | 用于指定数组的维度 |
代码实例:
#array()创建数组
#object:可以输入一个列表,可以是一维或多维
#dtype:指定数据类型,可选,如果不指定,则根据实际输入的数据类型自动判断
#order:指定内存的存储方式,C-按行存,F-按列存,默认C
#ndmin:指定数组的维度
a=np.array([1,2,3,4,5],dtype=np.int32,order="F")
print(a)
a=np.array([1,2,3],ndmin=2)
print(a)#创建了一个二维数组
# 学习产出:
2.2 zeros( )
可以创建一个指定大小的数组,数组元素全部以0填充
格式:
numpy.zeros(shape, dtype = float, order = 'C')
| 参数 | 描述 |
|---|---|
| shape | 数组形状 |
| dtype | 数据类型,可选 |
| order | ‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组 |
a=np.zeros((2,3))
2.3 ones( )
可以创建指定大小的数组,数组元素以1填充
a=np.full((3,3),fill_value=5)
print(a)
2.4 full()
full()用于创建一个填充指定值的数组。
格式:
numpy.full(shape, fill_value, dtype=None, order='C')
| 参数 | 描述 |
|---|---|
| shape | 数组的形状(如 (2, 3) 表示 2 行 3 列的数组) |
| fill_value | 填充的值 |
| dtype | 数组的数据类型(如 np.float32) |
| order | 数组的内存布局(如 'C' 表示 C 风格,'F' 表示 Fortran 风格) |
代码实例:
#full方法根据指定的形状创建一个数组
#根据指定值填充
a=np.full((3,3),fill_value=5)
print(a)
2.5 arange()
arange()创建一个等差数列构成的数组
start:开始值,默认为0
stop:结束值,必填
step:步长,默认为1
dtype:数据类型,可选,默认为int
格式:
numpy.arange(start, stop, step, dtype)
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
| 参数 | 描述 |
|---|---|
| start | 起始值,默认为 0 |
| stop | 终止值(不包含) |
| step | 步长,默认为 1 |
| dtype | 返回 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型 |
案例1:
a=np.arange(0,10,2)
print(a)
#start为0可以省略不写,step为1可以省略不写
a=np.arange(1,10,2)
print(a)
案例2:
import numpy as np
# 创建一个从 1 到 10 的数组
arr = np.arange(1, 11)
print(arr)
# 输出:
# [ 1 2 3 4 5 6 7 8 9 10]
案例3:
import numpy as np
# 创建一个从 0 到 9,步长为 2 的数组
arr = np.arange(0, 10, 2)
print(arr)
# 输出:
# [0 2 4 6 8]
案例4:
import numpy as np
# 创建一个从 10 到 0,步长为 -1 的数组
arr = np.arange(10, 0, -1)
print(arr)
# 输出:
# [10 9 8 7 6 5 4 3 2 1]
案例5:
import numpy as np
# 创建一个从 0 到 1,步长为 0.1 的浮点数数组
arr = np.arange(0, 1, 0.1)
print(arr)
# 输出:
# [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
注意:
- arange() 函数生成的数组不包含 stop 值。
- 如果 step 为负数,则 start 必须大于 stop,否则生成的数组为空。
- arange() 函数在处理浮点数时可能会出现精度问题,因为浮点数的表示和计算存在精度误差。
2.6 linspace
在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份
start:开始值,必填
stop:结束值,必填
num:等分个数,默认为50
endpoint:是否包含结束值,默认为True
dtype:数据类型,可选,默认为floatar
默认包含终止值,如果为false不包含终止值
格式:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
| 参数 | 描述 |
|---|---|
| start | 起始值,默认为 0 |
| stop | 终止值(默认包含) |
| num | 表示数值区间内要生成多少个均匀的样本,默认值为 50 |
| endpoint | 默认为 True,表示数列包含 stop 终止值,反之不包含 |
| retstep | 表示是否返回步长。如果为 True,则返回一个包含数组和步长的元组;如果为 False,则只返回数组。默认为 False。 |
| dtype | 返回 ndarray 的数据类型,默认为 None,表示根据输入参数自动推断数据类型。 |
案例:
'''
linspace 函数:
1、在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份
'''
a=np.linspace(0,10,2) #等分成n份
print(a)
a=np.arange(10,0,-1)
print(a)
#stop=(stop-start)////(num-1)
说明:以上几个函数通常用于创建数字类型的数组,也可以用于创建布尔、字符串等类型的数组。但更适合用于创建数字数组。
3.数据类型
NumPy 提供了比 Python 更加丰富的数据类型,如下所示:
| 序号 | 数据类型 | 语言描述 |
|---|---|---|
| 1 | bool_ | 布尔型数据类型(True 或者 False) |
| 2 | int_ | 默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64 |
| 3 | intc | 和 C 语言的 int 类型一样,一般是 int32 或 int 64 |
| 4 | intp | 用于索引的整数类型(类似于 C 的 ssize_t,通常为 int32 或 int64) |
| 5 | int8 | 代表与1字节相同的8位整数。值的范围是-128到127 |
| 6 | int16 | 代表 2 字节(16位)的整数。范围是-32768至32767 |
| 7 | int32 | 代表 4 字节(32位)整数。范围是-2147483648至2147483647 |
| 8 | int64 | 表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807 |
| 9 | uint8 | 1字节(8位)无符号整数 |
| 10 | uint16 | 2 字节(16位)无符号整数 |
| 11 | uint32 | 4 字节(32位)无符号整数 |
| 12 | uint64 | 8 字节(64位)无符号整数 |
| 13 | float_ | float64 类型的简写 |
| 14 | float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位 |
| 15 | float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位 |
| 16 | float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位 |
| 17 | complex_ | 复数类型,与 complex128 类型相同 |
| 18 | complex64 | 表示实部和虚部共享 32 位的复数 |
| 19 | complex128 | 表示实部和虚部共享 64 位的复数 |
| 20 | str_ | 表示字符串类型,等价于unicode_ |
| 21 | bytes_ | 表示字节串类型,基于字节 |
| 22 | string_ | 表示字节串类型,等价于bytes_,基于字节,NumPy 2.0以后版本被移除,使用bytes_代替 |
| 23 | unicode_ | 表示字节串类型,基于字符,NumPy 2.0以后版本被移除,使用str_`代替 |
3.1 数据类型对象
数据类型对象(Data Type Object)又称 dtype 对象,是用来描述与数组对应的内存区域如何使用。
1.可以在创建数组时指定 dtype 参数来定义数组中元素的数据类型。
例如:
import numpy as np
# 创建一个 int32 类型的数组
arr_int = np.array([1, 2, 3], dtype=np.int32)
print(arr_int.dtype) # 输出: int32
# 创建一个 float64 类型的数组
arr_float = np.array([1, 2, 3], dtype=np.float64)
print(arr_float.dtype) # 输出: float64
arr_str = np.array([1,2,3],dtype=np.string_)
print(arr_str)
#输出:
AttributeError: `np.string_` was removed in the NumPy 2.0 release. Use `np.bytes_` instead.
arr_str = np.array([1,2,3],dtype=np.bytes_)
print(arr_str)
#输出:
[b'1' b'2' b'3']
arr_str = np.array([1,2,3],dtype=np.unicode_)
print(arr_str)
# 输出:
AttributeError: `np.unicode_` was removed in the NumPy 2.0 release. Use `np.str_` instead.
arr_str = np.array([1,2,3],dtype=np.str_)
print(arr_str)
# 输出:
['1' '2' '3']
2.可以使用数组的 dtype 属性来获取数组中元素的数据类型。
例如:
arr = np.array([1, 2, 3])
print(arr.dtype) # 输出: int32
3.可以使用 astype() 方法来转换数组中元素的数据类型。
例如:
arr = np.array([1, 2, 3])
arr_float = arr.astype(np.float64)
print(arr_float.dtype) # 输出: float64
3.2 数据类型标识码
NumPy 中每种数据类型都有一个唯一标识的字符码,int8, int16, int32, int64 四种数据类型可以使用字符串 ‘i1’, ‘i2’,‘i4’,‘i8’ 代替,如下所示:
| 字符 | 对应类型 |
|---|---|
| b | 代表布尔型 |
| i | 带符号整型 |
| u | 无符号整型 |
| f | 浮点型 |
| c | 复数浮点型 |
| m | 时间间隔(timedelta) |
| M | datatime(日期时间) |
| O | Python对象 |
| S,a | 字节串(S)与字符串(a) |
| U | Unicode |
| V | 原始数据(void) |
以下是 NumPy 中常见的数据类型标识码及其对应的详细列表:
整数类型
| 数据类型 | 标识码 | 描述 |
|---|---|---|
| int8 | i1 | 8 位有符号整数 |
| int16 | i2 | 16 位有符号整数 |
| int32 | i4 | 32 位有符号整数 |
| int64 | i8 | 64 位有符号整数 |
| uint8 | u1 | 8 位无符号整数 |
| uint16 | u2 | 16 位无符号整数 |
| uint32 | u4 | 32 位无符号整数 |
| uint64 | u8 | 64 位无符号整数 |
浮点数类型
| 数据类型 | 标识码 | 描述 |
|---|---|---|
| float16 | f2 | 16 位浮点数(半精度) |
| float32 | f4 | 32 位浮点数(单精度) |
| float64 | f8 | 64 位浮点数(双精度) |
复数类型
| 数据类型 | 标识码 | 描述 |
|---|---|---|
| complex64 | c8 | 64 位复数(单精度) |
| complex128 | c16 | 128 位复数(双精度) |
布尔类型
| 数据类型 | 标识码 | 描述 |
|---|---|---|
| bool | b1 | 布尔类型 |
字符串类型
| 数据类型 | 标识码 | 描述 |
|---|---|---|
| bytes | S10 | 长度为 10 的字节串 |
| str | U10 | 长度为 10 的 Unicode 字符串 |
Python 对象类型
| 数据类型 | 标识码 | 描述 |
|---|---|---|
| O | O | Python 对象类型 |
例如:自定义一个int32的数据类型
dt=np.dtype('i4')
data = np.array([1,2,3,4],dtype=dt)
print(data) #输出:[1 2 3 4]
print(data.dtype) #输出:int32
可以自定义复杂的数据结构:
dt=np.dtype([('name','S10'),('age','i4')])
data = np.array([('zhangsan',20),('lisi',21)],dtype=dt)
print(data) #输出:[(b'zhangsan', 20) (b'lisi', 21)]
print(data.dtype) #输出:[('name', 'S10'), ('age', '<i4')]
说明:
在编程中,字节序标记用于指定数据的字节顺序。常见的字节序标记包括:
<: 小端序,数据的最低有效字节存储在内存的最低地址,而最高有效字节存储在内存的最高地址。>: 大端序,数据的最高有效字节存储在内存的最低地址,而最低有效字节存储在内存的最高地址。
4.数组属性
4.1 shape
返回一个元组,元组中的每个元素表示数组在对应维度上的大小。元组的长度等于数组的维度数。
shape 属性功能:
返回一个由数组维度构成的元组
shape=(行数,列数)
返回一个形状的元组
可以修改数组的形状
修改过后的必须与原数组的个数保持一致
array_one = np.array([[1,2,3],[4,5,6]])
array_one.shape = (3,2)
print('array_one 转变数组维度大小之后的数组维度:',array_one.shape)
print('array_one 转变数组维度大小之后的数组内容:',array_one)
如果使用shape属性修改数组的形状,则修改的是原数组的形状,reshape修改数组的形状会返回一个新数组,不修改原数组的形状。
4.2 数组维度
数组的维度就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维
ndmin 是 NumPy 中用于创建数组时指定最小维度的参数。它通常在 numpy.array() 函数中使用。通过 ndmin,你可以确保生成的数组至少具有指定的维度。
ndim 是 NumPy 数组的一个属性,用于返回数组的维度数(即数组的秩)。它表示数组有多少个维度。
案例:
import numpy as np
# 指定/查看数组维度
def ndmin_test():
threeArray = np.array([1,2,3,4],ndmin=2)
print("ndmin 指定数组:",threeArray)
print("ndmin 指定数组:",type(threeArray))
print("ndim 查看维度:",threeArray.ndim)
4.3 flags
flags 属性功能:
- 返回 ndarray 数组的内存信息
'''
flags 属性功能:
1、返回 ndarray 数组的内存信息
'''
def flags_test():
array_one = np.array([[1,2,3],[4,5,6]])
print('array_one 数数组的内存信息:\n',array_one.flags)
输出:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
5.切片
ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样;
切片:[start:stop:step],stop是不包含的
numpy数组切片,可以分行方向切片,列方向切片
5.1 slice()
在 Python 中,slice 可以作为一个对象来使用。你可以创建一个 slice 对象,然后使用它来获取序列的片段。
参数:
- start 是切片开始的位置(包含该位置)。
- stop 是切片结束

最低0.47元/天 解锁文章
2044

被折叠的 条评论
为什么被折叠?



