1、基本操作
1.1创建array(数组)-->模拟矩阵
import numpy as np
list1 = [1,2,3,4,5]
v = np.array(list1)
这样我们就成功创建一个一维数组了!
注意列表与数组的区别 列表是有逗号的而数组是没有的
那么大家有没有一个疑惑?那高维数组该怎么创建?其实很简单
m = np.array([list1,list1])
z = np.array([[list1,list1,list1]])
注意:这里小括号内的中括号以及逗号是无法省略的。
这样我们就成功创建了一个二维和三维数组,高维数组依次类推啦。
看一下z数组吧
1.2数组的基本操作
基本属性
v.shape
v.ndim
m.shape
m.ndim
z.shape
z.ndim
结果
(5,)
1
(2, 5)
2
(1, 3, 5)
3
升维
import numpy as np
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
#reshape
r1 = v.reshape(2,4)
#此处4的位置可以写为-1让计算机自己计算
r2 = v.reshape(2,2,2) #一维到三维
r3 = r1.reshape(1,2,4) #二维到三维
结果
r1:
[[1 2 3 4]
[5 6 7 8]]r2:
[[[1 2]
[3 4]][[5 6]
[7 8]]]r3:
[[[1 2 3 4]
[5 6 7 8]]]
另一种方法
#resize 不返回计算结果 直接修改
v.resize(2,4)
结果
v:
[[1 2 3 4]
[5 6 7 8]]
降维(转一维)
v = r2
r2 = v.ravel()
r3 = v.flatten()
结果
r2和r3一样
[1 2 3 4 5 6 7 8]
1.3创建特殊的数组
全为0的数组
np.zeros(5)
np.zeros((2,2))#高维同理
全为1的数组
np.ones(5)
np.ones((2,2))
np.ones(((2,2,2)))#高维同理
全为某个数字
np.full((3,4),2)#3行4列全为2
创建单位矩阵
单位矩阵就是对角线元素全为1的矩阵
但如果出现非方阵的情况怎么办呢
np.eye(5)
np.eye(5,7)
这个就是非方阵的情况啦
1.4常用函数
np.arange(start,stop,step,dtype)
start:起始 可忽略不写 默认从0开始
stop:终止 不可忽略
step:步长 可忽略不写 默认步长为1
r3 = np.linspace(0, 1,10)
dtype: 默认为None 设置显示元素的数据类型
r1 = np.arange(2,10,2)#终点值为10,起点值为2,步长为2;
r2 = np.arange(0,9,1)#终点值为9,起点值为0,步长为1;
r1:[2 4 6 8]
r2:[0 1 2 3 4 5 6 7 8]
linspace(start,stop,nums)
star 和 stop 意思都同上 nums通俗一点来理解就是你需要几个点
这三个参数缺一不可 [start,stop]
r3 = np.linspace(0, 1,10)
r3:
[0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
0.66666667 0.77777778 0.88888889 1. ]
1.5数组的组合
准备工作
import numpy as np
array1 = np.arange(9).reshape(3,3)
array2 = 2*array1
#指array1里每个元素变为原来的两倍后赋值=给array2
水平组合
r1 = np.hstack((array1,array1))
r2 = np.concatenate((array1,array2),axis = 1)
#注意(array1,array2) 的小括号!
-----------------------------------------------------------------------------------
result:
r1
>>array([[0, 1, 2, 0, 1, 2],
[3, 4, 5, 3, 4, 5],
[6, 7, 8, 6, 7, 8]])
r2
>>array([[ 0, 1, 2, 0, 2, 4],
[ 3, 4, 5, 6, 8, 10],
[ 6, 7, 8, 12, 14, 16]])
垂直组合
r3 = np.vstack((array1,array1))
r4 = np.concatenate((array1,array2),axis = 0)
-----------------------------------------------------------------------------------
result:
r3
>>array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
r4
>>array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 0, 2, 4],
[ 6, 8, 10],
[12, 14, 16]])
1.6数组切割
准备工作
import numpy as np
array1 = np.arange(16).reshape(4,4)
>>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
水平切割
r1 = np.hsplit(array1,1)
r2 = np.split(array1,2,axis = 1)
result:
r1
>>[array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
r2
>>[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]),
array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
垂直切割
r3 = np.vsplit(array1,1)
r4 = np.split(array1,2,axis = 0)
result:
r3
>>[array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
r4
>>[array([[0, 1, 2, 3],
[4, 5, 6, 7]]),
array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
1.7数组的运算
加减乘除都是在对应位置运算
import numpy as np
array1 = np.arange(16).reshape(4,4)
array2 = 2*array1
array1 + array2
>>array([[ 0, 3, 6, 9],
[12, 15, 18, 21],
[24, 27, 30, 33],
[36, 39, 42, 45]])
array1-array2
>>array([[ 0, -1, -2, -3],
[ -4, -5, -6, -7],
[ -8, -9, -10, -11],
[-12, -13, -14, -15]])
array1 *array2
>>array([[ 0, 2, 8, 18],
[ 32, 50, 72, 98],
[128, 162, 200, 242],
[288, 338, 392, 450]])
1.8numpy的随机模块
randint:产生随机整数
返回一个随机整型数,[ , )
numpy.random.randint(low, high=None, size=None)
low: int 生成的数值最低要大于等于low。
(hign = None时,生成的数值要在[0, low)区间内)
high: int (可选)
如果使用这个值,则生成的数值在[low, high)区间。
size: int or tuple of ints(可选)
输出随机数的尺寸,比如size = (m * n* k)则输出同规模即m * n* k个随机数。默认是None的,仅仅返回满足要求的单一随机数。
np.random.randint(5)
>>4
np.random.randint(5,10)
>>5
np.random.randint(5,10,(2,3))
>>
array([[8, 9, 9],
[9, 6, 5]])
rand:返回(0,1)之间随机浮点数
用于生成在[0, 1)区间内均匀分布的随机数,可以接受多个整数参数,用于指定生成数组的形状。
np.random.rand(5)#一维
>>array([0.66296071, 0.41581073, 0.60973892, 0.02437426, 0.39921265])
np.random.rand(3,4)#二维
>>array([[0.77292118, 0.06631582, 0.11259988, 0.95067329],
[0.5838605 , 0.06931595, 0.95720012, 0.64767009],
[0.89740892, 0.92919478, 0.8203114 , 0.74555259]])
normal:生成复合正正态分布的数据
np.random.normal(loc,scale,size)
loc:均值
scale:方差
size:为一个二元元组,如(2,1), 为返回的矩阵的size
np.random.normal(0,1,10)#均值为0,方差为1(正态分布),一维数组 有十个
>>array([ 0.94422401, 0.56711231, -1.15241544, 0.2371444 , 0.42166489,
-0.4684138 , -0.94660183, 1.20413158, 2.05810196, -1.5777759 ])
np.random.normal(10)#均值为10
>>9.340917150594466
1.9常见统计量
方差:array1.var() 和:array1.sum()
标准差:array1.std() 中值:np.median(array1)
均值:array1.mean()
1.10矩阵运算
矩阵乘法 a.dot(b) np.dot(a,b)
矩阵求逆 np.linalg.inv(a)
1.11函数
类别 NumPy函数 Math模块函数 功能
数学常数 np.e math.e 自然常数
数学常数 np.pi math.pi 圆周率
舍入函数 np.ceil() math.ceil() 进尾取整
舍入函数 np.floor() math.floor() 去尾取整
舍入函数 np.around() 四舍五入到指定精度
舍入函数 np.rint() 四舍五入到最近整数
快速转换函数 np.deg2rad()、np.radians() np.radians() 度转弧度
快速转换函数 np.rad2deg()、np.degrees() math.degrees() 弧度转度
幂指数对数函数 np.hypot() math.hypot() 计算直角三角形的斜边
幂指数对数函数 np.square() 平方
幂指数对数函数 np.sqrt() math.sqrt() 开平方
幂指数对数函数 np.power() math.pow() 幂
幂指数对数函数 np.exp() math.exp() 指数
幂指数对数函数 np.log()、np.log10()、np.log2() math.log()、math.log10()、math.log2() 对数
三角函数 np.sin()/arcsin() math.sin()/asin() 正弦/反正弦
三角函数 np.cos()/arccos() math.cos()/acos() 余弦/反余弦
三角函数 np.tan()/arctan() math.tan()/atan() 正切/反正切
————————————————版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/feizuiku0116/article/details/126705859
2.后话
希望大家可以一起讨论,学习和进步呀!