Numpy笔记
本文最后更新于:2024年8月11日 晚上
Numpy
numpy
往往与SciPy
、matplotlib
一起使用来替代一些matlab
的功能
Ndarry
基本操作
- 一个N维数组对象,只能存放==同类型==数据,跟C语言的数组类似
- 默认是行向量,使用
nd.T
把nd
转换成列(一维是不可转的)
也可以使用reshape(-1,1)
的方法强行要求只有一列,那看起来就是列向量了,实际上是二维向量 numpy.arry(object,dtype=none,copy=true,order=true,ndmin=0)
object
:数组或嵌套的数列dtype
:数组的元素类型copy
:是否拷贝,如果不拷贝则对原数组进行修改,否则返回修改后的副本order
:创建数组的方向,C为行方向,F为列方向,A为任意方向ndmin
:指定生成数组的最小维度
初体验
1 |
|
指定数据类型
1 |
|
支持的数据类型
名称 | 类型 | 描述 |
---|---|---|
bool_ | 标准布尔值(True|False) | |
int_ |
默认整形 | 默认整形方法在未来版本会==被淘汰== |
intN |
长度为N 的整形 |
N可取8,16,32,64 可以使用 i1 ,i2 ,i4 ,i8 指代需要从Numpy包导入这些指代 |
uintN |
无符号长度为N 的整形 |
N可取8,16,32,64 |
float_ | 双精度(64bit) | |
float16 | 半精度 | |
float32 | 单精度 | |
complex_ | 双64bit浮点数表示复数 | |
complex64 | 双32bit浮点数表示复数 |
内建数据类型字符
字符 | 类型 |
---|---|
b | 布尔值 |
i | 有符号整形 |
u | 无符号整形 |
f | 浮点型 |
c | 复数浮点 |
m | 时间间隔(timedelta) |
M | 时间日期(datetime) |
O | 对象(Object) |
S,a | 字符串(字节) |
U | Unicode |
V | 原始数据(void) |
数据类型对象(dtype)
- 数据类型
- 数据大小(字节)
- 数据顺序(大端法|小端法)以(
<
表示小端法以>
表示大端法) - 等
构造数据类型
numpy.dtype(object,align,copy)
object
:需要转换的数据类型对象copy
:复制dtype
对象,布尔值
基本使用
1 |
|
构造一个结构化对象,类似于数据库的各个字段
1 |
|
数组属性
- 数组的维数称为
秩数(rank)
- 每个线性的数组称为一个
轴(axis)
,轴的数量就是秩 - 如果要对每一列进行操作,可以设置轴
axis=0
,对每一行进行操作,可以设置轴axis=1
属性 | 说明 |
---|---|
ndim |
秩 |
shape |
维数,nxm 矩阵,返回一个tuple[行数,列数] |
size |
n*m 的值,元素数量 |
dtype |
数据类型 |
itemsize |
每个元素的大小,单位为字节 |
reshape |
返回一个shape 后的==副本== |
等 |
.shape
:
1 |
|
创建数组
创建一个指定维数、格式化的空数组,此时数组元素是未初始化的随机值
==NOTE==
在
shape
中如果使用(a,b)等元组,则创建相应的维数使用单个数则是生成一维数组
numpy.empty(shape,dtype,order)
创建一个指定维数、格式化的数组,元素以0进行初始化
numpy.zeros(shape,dtype,order)
创建一个指定维数、格式化的数组,元素以1进行初始化
numpy.ones(shape,dtype,order)
创建一个对角矩阵(单位矩阵:对角线是1,其余为0)
numpy.eye(shape)
生成一个随机整数矩阵
numpy.random.randint(start,end,side)
size
接受随机矩阵的维数由python对象生成数组
numpy.arry(<python object>,dtype,order)
==动态数组==
numpy.frombuffer(buffer,dtype,count,offset)
buffer
:任意对象,以流形式读入,使用字符串时先转换成二进制比特流dtype
:返回的数组类型count
:读取的数据数量,-1
为读取所有数据offset
:起始的读取位置
可迭代对象生成数组
numpy.fromiter(iterable,dtype,count=-1)
==数值范围生成==数组
numpy.arange(start,stop,step,dtype)
不含
stop
大多返回一维数组,python内置的
range
只能生成整数从==等差数列==生成数组
numpy.linspace(start,stop,num=50,endpoint,restep=False,dtype)
start
|stop
:起始值|终止值(含)num
:等步长的样本数量endpoint
:数列中是否包含stop
值,布尔值==NOTE==
linspace(0,1,10)
将0~1分成10份,由于最终点是1,因此从0开始每次只增长1/9
,需要每次增长0.1
的,需要分成11份,这样每次就步长1/10
了,或者将endpoint=False
???
numpy.logspace(start,stop,num,endpoint=True,base=10.0,dtype)
base
:对数log的底数
取缔循环
python中的循环是缓慢的,通过数组操作可以取缔循环
1 |
|
矩阵计算
加法
当一行加一列时会发生自动扩展(广播)
==按行|列求和==
1 |
|
此外还有var
|max
|avg
等通用函数
数组访问
切片
- 通过内置的方法切片
slice(start,stop,step)
- 直接切片
<arry object>[start,stop,step]
索引(高级索引)
Numpy
可以通过==整数数组==索引、==布尔数组==索引、==花式索引==
整数索引
对于一个2X2
数组矩阵,可以通过类似于直角坐标系方式的整数数组方式索引
1 |
|
你也可以把一个一维数组当做索引数组传入,将其值索引出来
二维矩阵索引
对于一个二维矩阵multi
:
multi[0,3:5]
:第0行的第三列到第五列(不含)multi[4:,4:]
:第四行、第四列开始的一个方阵multi[:,2]
:提取第二列的所有行multi[2::2,::2]
:第二行开始,步长为2(即双数)的行,从0开始到最后一列(步长为2)的列
Do Myself
矩阵转置:
1 |
|
拆分数组
1 |
|
沿着任意一个数组的列拆分:
1 |
|
数组展平:
1 |
|