作者:小蜗牛爱学习 来源:https://blog.csdn.net/qq_42755939/article/details/106953651?utm_source=app
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 [1] 。
了解了numpy的概念我们就来感受一下一下它的强大吧!
1、调用numpy的array()方法将列表转化为数组
arr01 = np.array([1,2,3]) print("array01的类型:",type(arr01)) #array01的类型: <class 'numpy.ndarray'> print(arr01)#[1 2 3]2、调用numpy的array()方法将range对象转化为数组
arr02 =np.array(range(6))print("array02的类型:",type(arr02),arr02)#array02的类型: <class 'numpy.ndarray'> [0 1 2 3 4 5]3、调用用numpy的arange()方法生成数组
arr03 = np.arange(10)print("array03的类型:",type(arr03),arr03)#array03的类型: <class 'numpy.ndarray'> [0 1 2]numpy数组支持多种数据类型:
1、整型
类型 代码 int8 i1 int16 i2 int32 i4 int64 i8
2、浮点型
float16 f2 float32 f4 float64 f8
3、复数:complex_ complex64 complex128
4、bool类型:true false
#01、int32 arr04 = np.arange(3) print(arr04,arr04.dtype) #[0 1 2] int32 #02、float64 data = [random.random() for i in range(10)] print(data) #[0.4495169679906501, 0.37812776730917963, 0.27453827162750943] arr05 = np.array(data) print(arr05,arr05.dtype) #float64保留几位小数,但是数据类型不变
arr05 = np.round(arr05,3) print(arr05,arr05.dtype) #[0.44951697 0.37812777 0.27453827] float64使用astype()方法修改数组的数据类型
arr09 = np.array([2.1,1.6,10.3],dtype="float") arr09 = arr09.astype("i1") print(arr09,arr09.dtype) #[ 2 1 10] int8 arr10 = np.array([1,1,0,1,0,0,1]) print(arr10.dtype) #int32 print(arr10.astype("bool")) #[True True False True False False True]这个方法返回的是一个新的数组,原来的数组不变
arr15 = np.array([[[1,2],[2,3],[3,4]],[[4,5],[5,6],[7,8]],[[9,10],[11,12],[13,14]],[[15,16],[17,18],[19,20]]]) arr16 = arr15.reshape((3,8))#将arr15转化为二维数组 print(arr16,arr16.shape) #(3, 8) arr17 = arr15.reshape((24,)) print(arr17) #当不知道一个数组的形状时,转化为一维数组的方法一: t1 = arr15.shape[0] t2 = arr15.shape[1] t3 = arr15.shape[2] arr18 = arr15.reshape(t1*t2*t3,) print(arr18)直接将多维数组转化为一维数组,他是展开,扁平化的意思
#当不知道一个数组的形状时,转化为一维数组的方法:使用方法flatten()方法 arr19 = arr15.flatten() print(arr19)规则1:如果两个数组的维度不相同,那么小维度数组的形状将会在最左边补1.
规则2:如果两个数组的形状在任何一个维度上不匹配,那么数组的形状会沿着维度为1扩展以匹配另外一个数组的形状。
规则3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度为1,那么会引起异常。
1、数组与数组之间可以进行加、减、乘、除、指数、求倒数、求相反数、位运算等
2、数组与数组计算分两类:
①:相同形状的数组 对应相互加减等
②:不同形状的数组 遵循广播原则
eg1结果分析:
1、 a1 = [[2 3 4] [5 6 7]] a2 = [0,1,2] 两个数组的形状为 a1.shape=(2,3),a2.shape=(3,)
2、 根据规则1: 数组a2的维度更小,所以在其左边补1,变为a2.shape -> (1,3),此时a1.shape=(2,3),a2.shape=(1,3),即a1 = [[2 3 4] [5 6 7]] a2 = [[0 1 2]]
3、 根据规则2: a1,a2的形状还是不匹配,所以a2会沿着维度为1的方向扩展,变成a2.shape=(2,3),
即a1 = [[2 3 4] [5 6 7]],a2 = [[0 1 2] [0 1 2]],现在两个数组的形状匹配了,可以看到它们的最终形状都为(2,3)
eg2结果分析:
1、 b1 = [[1] [2] [3]] b2 = [3,4,5]两个数组的形状为 b1.shape=(3,1),b2.shape=(3,)
2、 根据规则1:数组b2的维度更小,所以在其左边补1,变为b2.shape -> (1,3),此时b1.shape=(3,1),b2.shape=(1,3),即b1 = [[1] [2] [3] b2 = [[3 4 5]]
3、 根据规则2:b1,b2的形状还是不匹配,所以b1,b2会沿着维度为1的方向扩展,
变成b1.shape=(3,3),b2.shape=(3,3),即b1 = [[1 1 1] [2 2 2] [3 3 3]],b2 = [[3 4 5] [3 4 5] [3 4 5]]
现在两个数组的形状匹配了,可以看到它们的最终形状都为(3,3)
关注微信公众号『杰哥的IT之旅』,后台回复“1024”查看更多内容,回复“微信”添加我微信。
Jack Tian 认证博客专家 Linux 运维 GitHub 杰哥,博客专家、首页内容推荐官、互联网IT领域个人公众号、分享Linux运维、Python、开源项目、开发工具、编程技术、行业前沿资讯等相关内容干货!(关注后回复“1024”查看更多精选优质内容)