python三大库之--numpy(一)
python三大库之–numpy(一)
文章目录
- python三大库之--numpy(一)
- 一、numpy基础
- 1.1概念
- 优点
- 1.3 与python列表区别
- 二、使用步骤
- 1.引入库
- 2.创建对象
- 2.1.zeros()
- 2.2.ones()
- 2.3full()
- 2.5arange()
- 2.6 linspace
- 三,数据类型
- 3.1数据类型表
- 3.2数据类型标识码
- 四,数组属性
- 4.1 shape
- 4.2数组维度
- 4.3 flags
一、numpy基础
1.1概念
- numpy是python的第三方扩展包,主要用于计算,处理一维数据或多维数据
- NumPy 提供了大量的数学函数
- NumPy 的底层主要用 C语言编写,因此它能够高速地执行数值计算
- NumPy 还提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上
优点
NumPy 可以很便捷高效地处理大量数据,使用 NumPy 做数据处理的优点如下:
- NumPy 是 Python 科学计算基础库
- NumPy 可以对数组进行高效的数学运算
- NumPy 的 ndarray 对象可以用来构建多维数组
- NumPy 能够执行傅立叶变换与重塑多维数组形状
- NumPy 提供了线性代数,以及随机数生成的内置函数
1.3 与python列表区别
-
NumPy 数组是同质数据类型(homogeneous),即数组中的所有元素必须是相同的数据类型。数据类型在创建数组时指定,并且数组中的所有元素都必须是该类型。
-
Python 列表是异质数据类型(heterogeneous),即列表中的元素可以是不同的数据类型。列表可以包含整数、浮点数、字符串、对象等各种类型的数据。
-
NumPy 数组提供了丰富的数学函数和操作,如矩阵运算、线性代数、傅里叶变换等。
-
Python 列表提供了基本的列表操作,如添加、删除、切片、排序等。
二、使用步骤
1.引入库
在这里可以使用清华源
pip install numpy==1.26.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.创建对象
通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:
numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)
- object:表示一个数组序列
- dtype:参数,通过它可以更改数组的数据类型
- copy:可选参数,表示数组能否被复制,默认是 True
- order:以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)
- ndmin:用于指定数组的维度
import numpy as np
a=np.array([1,2,3,4,5])
print(a)
b=np.array([[1,2,3],[4,5,6]])
print(b)
[1 2 3 4 5]
[[1 2 3]
[4 5 6]]
2.1.zeros()
创建指定大小的数组,数组元素以 0 来填充
numpy.zeros(shape, dtype = float, order = 'C')
a=np.zeros((2,3),dtype=int,order='F')
print(a)
[[0 0 0]
[0 0 0]]
2.2.ones()
- shape:数组的形状(如
(2, 3)
表示 2 行 3 列的数组) - fill_value:填充的值
- dtype:数组的数据类型(如
np.float32
) - order:数组的内存布局(如
'C'
表示 C 风格,'F'
表示 Fortran 风格)
numpy.ones(shape, dtype = None, order = 'C')
a= np.ones((2,3),dtype=int,order='F')
print(a)
[[1 1 1]
[1 1 1]]
2.3full()
a=np.full((2,3),5,dtype=int,order='F')
print(a)
[[5 5 5]
[5 5 5]]
2.5arange()
arange() 函数用于创建一个等差数列的数组。它类似于 Python 内置的 range() 函数,但返回的是一个 NumPy 数组而不是一个列表。
numpy.arange(start, stop, step, dtype)
参数 | 描述 |
---|---|
start | 起始值,默认为 0 |
stop | 终止值(不包含) |
step | 步长,默认为 1 |
dtype | 返回 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型 |
a=np.arange(1,10,2)
print(a)
a=np.arange(1,10,0.5)
print(a)
[1 3 5 7 9]
[1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5 9. 9.5]
2.6 linspace
在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份
- 格式
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,表示根据输入参数自动推断数据类型。 |
#step=stop-start/(num-1)
a,step=np.linspace(1,10,5,retstep=True)
print(a)
[ 1. 3.25 5.5 7.75 10. ]
[ 1. 3.25 5.5 7.75 10. ]
三,数据类型
3.1数据类型表
序号 | 数据类型 | 语言描述 |
---|---|---|
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.2数据类型标识码
字符 | 对应类型 |
---|---|
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 对象类型 |
四,数组属性
4.1 shape
- 返回一个元组,元组中的每个元素表示数组在对应维度上的大小。元组的长度等于数组的维度数。
def shape_test():
array_one = np.array([[1,2,3],[4,5,6]])
print('array_one 原数组维度:',array_one.shape)
print('array_one 原数组内容:',array_one)
array_one.shape = (3,2)
print('array_one 转变数组维度大小之后的数组维度:',array_one.shape)
print('array_one 转变数组维度大小之后的数组内容:',array_one)
shape_test()
array_one 原数组维度: (2, 3)
array_one 原数组内容: [[1 2 3]
[4 5 6]]
array_one 转变数组维度大小之后的数组维度: (3, 2)
array_one 转变数组维度大小之后的数组内容: [[1 2]
[3 4]
[5 6]]
如果使用shape属性修改数组的形状,则修改的是原数组的形状,reshape修改数组的形状会返回一个新数组,不修改原数组的形状。
4.2数组维度
ndim
是 NumPy 数组的一个属性,用于返回数组的维度数(即数组的秩)。它表示数组有多少个维度。
def ndmin_test():
array_one = np.array([1,2,3],ndmin=2)
print('array_one 原数组维度:',array_one.ndim)
print('array_one 原数组内容:',array_one)
print('array_one 转变数组维度大小之后的数组维度:',array_one.ndim)
print()
ndmin_test()
array_one 原数组维度: 2
array_one 原数组内容: [[1 2 3]]
array_one 转变数组维度大小之后的数组维度: 2
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)
flags_test()
array_one 数数组的内存信息:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
说明
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 创建的副本,并且需要将更改写回原始数组。