Numpy
概念1
numPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
###手动创建数组1
2
3
4
5
6
7
8
9#anaconada自带print一般不要写某些地方要写
import numpy as np
创建几维数组就是嵌套几层(手动创建除了列表元组同样可以创建)除了array\asarray同样可以创建效果一样
创建一维数组
np.array([0.243,0.246,0.32,0.345,0.231])#可以用创建一维数组
创建二维数组
np.array([[1,2,3],[2,3,4]])
创建三维数组
np.array([[[1,2,3],[3,4,5]],[[2,3,4],[4,5,6]]])
###基本指令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20创建一个一维数组并且设置数据类型为浮点型
a1 = np.array([1,2,3],dtype=np.float64)
查看数组内数据类型
a1.dtype
查看数组的数据类型
type(a1) ndarray格式
数组内数据的加减乘除取商取余
a1*2\a1+2\a1*a1\a1**2等等都是对应的数据相乘相加等
数据类型修改
一方面在定义的时候直接定义数据类型
宁一方面在定以后直接强制修改
a1.astype(np.int32)
查看数组的外形
a1.shape
一维数组:返回的是元素的个数如(4,)表示元素的个数为4个 效果等同于函数len()
二维数组:返回的为数组的行数和列数(2,3) 2代表行数3代表列数
三维数组:返回的是各个维度的个数(3,2,3) 表示三维数组含有3个二维数组,每个二维数组含有2行3列
同理四维数组(2,5,2,10)#2个三维数组,每个三维数组含有5个二维数组,每个二维数组2行10列
返回一个内存对象
a1.data ====可以通过tolist转换为列表格式a1.data.tolist
###创建特殊数组1
2
3
4
5
6
7
8
9
10创建零数组
np.zeros((5,5))#输入行数和列数=====5行5列0数组
np.zeros_like(a1) 表示生成的零数组的行数列数同数组a1一样
创建全为1数组
np.ones((3,4))创建一个3行4列的数据
np.ones_like(a1) 创建一个数组行数和列数同a1一样
创建单位数组
np.identity(6) 创建一个6行6列的单位矩阵(对角线全为1)
创建空数组
np.empty((5,5)) 创建一个5行5列的空数组(会自动填值====占位)
###自己动生成数组1
2
3
4
5
6
7np.random.randint(1,100,(10,3)) 表示生成一个10行3列的矩阵,矩阵内的数据为1到100间的随机数
np.random.randint(1,100,10) 表示1到100件随机生成10个数可以通过reshape转换为数组格式
np.random.random(6) 表示随机生成6个0到1之间的小数
np.random.random((3,3)) 表示生成一个3行3列的数组,数据为0到1间的随机数
np.random.normal(4,1.2,(3,5)) 服从高斯分布(正态分布) 4表示
loc,1.2表示scale范围,(3,5)表示3行5列的矩阵
np.arange(1,13).reshape(3,4) arange先生成12个数然后在转化为3行4列的数组(记住数据要对齐)
###数组的索引和切片1
2
3
4
5
6
7
8
9
10一维数组的索引和切片
一维数组的索引和切片同列表的索引和切片一样,存在开始、结束和步长
test_array_1[5] test_array_1[1:5] test_array_1[-1:5:-1] test_array_1[::-1]
一维数组选区的赋值:
第一种:通过列表赋值 test_array_1[1:5]=[-1,-2,-3,-1]
第二种:选区单元赋值 test_array_1[-1:3:-1]=0 全部赋为某个值
第三种:通过数组赋值 test_array_1[2:6]=np.array([0,3,6,7])
第四种:通过元组对选区进行赋值 test_array_1[-6::-1]=(2,6,8,0,1) 或者直接去掉括号
【注意:列表切片赋值原列表不变而数组切片赋值原数组会发生变化
b = a1[2:5] b[:] = [33,45,34]====原数组会发生变化,注意[:]不能少,若加上.copy()深复制就不会改变原数组,.view()为浅复制,公用一套值.数组中切片使用时一般都要加上copy保护原数组】
1 | 二维数组的切片和索引 |
1 | 三维数组的索引和切片 |
1 | 布尔值数组索引(可以选取任意行任意列) |
1 | 花式索引 |
###数组的转置1
2
3
4
5
6实质:数组或者矩阵的转置实质就是行列转换
二维数组的转置
ar12.T
高维数组的转置(3维以及以上)当然二维也可以用transpose
arr2 = arr1.transpose((1,0,2)) 0,1,2表示维度三个表示三维,默认0,1,2(叫做轴构成对应维度空间的基础)顺序,形成的新的会按照轴的顺序进行排列
注意:可以根据轴的顺序判断数据的变化以及位置,同时也可以根据数据的变化规律推导出轴顺序.
###数组的函数计算(注意与矢量化计算的区别)1
2
3
4
5
6
7
8
9
10
11常用的得一元函数
np.sqrt(arr) 对数组的每一个数据都开方
np.exp(arr) 以e为底对应的幂指数
np.abs(arr) 数组中每个数据的绝对值
np.floor(ar_12) 向下取整(小的)注意复数取整向小的而不是向近的
np.ceil(ar_12) 向下取整
np.sign(ar_12) 返回数组中每个数据的符号(1和-1表示)
常用的二元函数
np.maximum(ar_13,ar_14) 两个矩阵比较形成的新矩阵数据为两个矩阵中各自为数中大的值
add,subtract,multiply,divide函数 加减乘除
np.power(ar_13,ar_14) ar_13是底,ar_14是幂 ,ar_14除了是数组也可以是一个实数
小知识:Python的八大基本数据类型
1.Number(数字)
2.String(字符串)
3.List(列表)
4.Tuple(元组)
5.Sets(集合)
6.Dictionary(字典)
7.None(空类型)
8.Object(对象类型)