narray对象
前言
参考书目: python科学计算第二版 张若愚
numpy库安装
pip install python-numpy
1.简介
几种对象对比 | 优缺点 |
---|---|
标准库中的列表(List) | 可当作数组使用,但列表的保存对象是对象的指针,一张列表 = 指针+对象 |
标准库中的array | array直接装入对象,但只支持一维数组 |
numpy array | 存储单一数据类型的多为数组 |
numpy ufunc | 对n数组进行特殊处理的函数 |
2.narray对象
2.1 narray数据类型
|–|--|
|整形|int8,int16,int32,int ==int64|
|浮点型|float16,float32,float=float64,float128=complex|
2.2 导入与创建
操作与方法 | 说明 |
---|---|
导入 | import numpy as np |
创建 | a = np.array( [ [ ] , [ ], [ ],[ ][ ] ] ) a =np.array( [ ] ) |
2.3 数组元素类型
a.shape | 方法shape描述数组大小的元组 a.shape = n,m重新规划数组的大小,m=-1自动为n行数组 |
b = a.reshape((3,2)) | 重新创建元组大小的数组,不改变原数组的形状,但a,b共享存储空间,一个值改变另一个值改变 |
a.dtype元素类型 | 返回元素类型 定义数组指定元素类型:a = np.array( [ ], dtype = np.int32/float–64位/comples–128位) numpy的元素类型:float16,float32,float64,float128,int32,int,int64 a.dtype.type返回对象类型和元素类型 |
c = a.astype(np.int32) | 更改数组的所有元素类型 |
2.4 自动生成数组
| — | — |
|1 步长生成数组||
| np.arange(0,1,0.1) | numpy中的函数arrange生成==【0-1)的数,步长为0.1
arange(10)默认从0开始,步长为1|
| np,linspace(0,1,10)
np.linspace(0,1,10,endpoint=False/True) [0,1]范围内以等差数列生成10个数的一维数组
endpoint默认为ture包含末尾值,False不包含||
|np.logspace(0,2,5)
.logspace(0,2,base=10,endpoint=True|[0,2]内生成个数为5的等比数列,同linspace一样有endpoint带ture和false,默认为True;base为基数,默认为10.|
|3 形状生成数组||
|np.empty( (2,3),np.int)|分配(2,3)(可以为一个数或一个元组)的数组所使用的内存,未初始化|
|np.zeros()|同上,初始化内存为0|
|np.ones()|初始化内存为1|
|np.full(shape,指定值)|可将指定的初始化shape大小的数组|
|zero_like(a),ones_like(a),full_like(a,指定值)|生成和a一样大小的数之类型的数组,zeros(a.shape,a.dtype)|
|4 从来源生成数组||
|np.fromstr(str,dtype)|从字符串类型变量中生成数组,dtype可不用重复加np
适用于:字符中二进制的数转换成对应类型的数的数组
对字符串进行复制|
|np.frombuffer(str,dtype)|同上,与原字符串共享内存,并为只读,不可修改|
|np.fromfile(“路径”,dtype)|同上|
|np.fromfunction(funnc,下标)|用fromfunction通过从下标计算数值的函数创建数组见第二部分 func函数==|
2.5 存取元素
|-|-|
|共享内存||
|a = np.arange(10)|a[5] 获取元素
a[3:5]=1,3 切片【3,5),并可直接更改
a[:5] 从头到5
a[:]从头到尾
a[1:-1]从1到倒数第一
a[::1]切片步长为1
注:该数组切片后赋值的数组与原数组共享内存空间,值一起变化|
|不共享内存||
|下标为整数列表|b = a[[3,3,1,8]] 对a中下标为[3,3,1,8]的4个数组成一个新的数组,不共享内存
可用来修改元素的值a[[3,1,8]]=1,2,3|
|下标为整数数组|b = a[np.array[3,1,2]],利用下标为数组中的数组成一个新的数组|
|以上两种方法都可定义一个多维数组:a[[1,2,3,4],[1,2,3,2]]||
|下标为布尔数组/布尔列表|a[np.array[True,False…]]或a[[False,True…]]
a[np.array[0,1,1,2,3],dtype=np.bool]|
2.6 多维数组
#多维数组的下标为
a = np.array(0,60,10).reshape(-1,1)+np.array(0,6) #列向量加行向量
# a[行下标,列下标],行列可用一维向量a[下标]的下标类比
a[:,:] #整个二维数组
多维数组的行列下标可用整数元组,整数列表,整数数组、布尔数组表示,布尔列表表示
2.7 结构数组
作用:c语言中的struct创建的数组中的元素的数据存放,定义了一个结构数组,python中定义一个结构相同的结构数组,方便读取c语言中的结构数组的二进制数据