这篇教程python扩展库numpy入门教程写得很实用,希望能帮到您。
一、numpy是什么?扩展库numpy是Python支持科学计算的重要扩展库,是数据分析和科学计算领域如scipy、pandas、sklearn 等众多扩展库中的必备扩展库之一,提供了强大的N维数组及其相关运算、复杂的广播函数、C/C++和Fortran代码集成工具以及线性代数、傅里叶变换和随机数生成等功能。本章童点介绍数组与矩阵及其相关运算,为学习和理解后面章节中的数据分析、机器学习打下良好的基础。 简单来说就是你用来为人工智能领域打基础的东西,私话说得好,基础不牢,地动山摇嘛~ 所以这个地方可要好好学习哦~~
二、numpy数组在numpy中使用的不是python自带的数据类型list ,而是numpy中的ndarray 那为什么使用ndarray 而不是使用list 呢? 因为ndarray是由c/c++写出来的,占用内存更小,使用速度更快 创建一个ndarray的方法有很多,这里说下使用array方法转化的 #!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: Smly# @datetime: 2021/9/26 22:22 # @Version: 1.0import numpy as npli = [1, 2, 3]tp = (1, 2, 3)nday1 = np.array(li)nday2 = np.array(tp)print("*****类型*****")print(type(nday1))print(type(nday2))print("*****数组*****")print(nday1)print(nday2) 输出结果: *****类型*****<class 'numpy.ndarray'><class 'numpy.ndarray'>*****数组*****[1 2 3][1 2 3]
2.1 数组使用如果元素相同的话,可以进行加减乘除 在元素个数相同的情况下,可以进行数组间的加减 在元素个数相同的情况下,可以进行数组间的乘除 对某个数进行的乘除,可以自动进行到所有元素 看例子理解: #!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: Smly# @datetime: 2021/9/26 22:22 # @Version: 1.0import numpy as np li = [1, 2, 3] # 列表tp = (1, 2, 3) # 元组nday1 = np.array(li) # 内置方法将列表转为ndarraynday2 = np.array(tp) # 内置方法将元组转为ndarraynday3 = np.array(range(5)) # 使用range内置函数方法生成ndarray连续数组nday4 = np.array(range(5, 10)) # 使用range内置函数方法生成ndarray连续数组print("*****类型*****")print(type(nday1))print(type(nday2))print(type(nday3))print(type(nday4))print("*****数组*****")print(nday1)print(nday2)print(nday3)print(nday4)print("*****数组加减*****")print(nday2 + nday1)print(nday2 - nday1)print(nday4 - nday3)print(nday3 + nday4)# 在元素个数相同的情况下,可以进行数组间的加减print("*****数组乘除*****")print(nday2 * nday1)print(nday2 // nday1)print(nday4 * nday3)print(nday4 // nday3)# 在元素个数相同的情况下,可以进行数组间的乘除print(nday1 * 3)print(nday2 // 2)print(nday3 * 2)print(nday4 // 2)# 对某个数进行的乘除,可以自动进行到所有元素 运行结果: *****类型*****<class 'numpy.ndarray'><class 'numpy.ndarray'><class 'numpy.ndarray'><class 'numpy.ndarray'>*****数组*****[1 2 3][1 2 3][0 1 2 3 4][5 6 7 8 9]*****数组加减*****[2 4 6][0 0 0][5 5 5 5 5][ 5 7 9 11 13]*****数组乘除*****[1 4 9][1 1 1][ 0 6 14 24 36][0 0 0 0 0][3 6 9][0 1 1][0 2 4 6 8][2 3 3 4 4]
2.2 创建数组刚刚的array() 方法是将列表和元组等迭代对象转为ndarray数组 接下来要说的是自动创建数组
1. 使用empty创建空数组里面会有初始值,但是数组初始为None #!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: Smly# @datetime: 2021/9/28 12:29 # @Version: 1.0import numpy as npem1 = np.empty(5) # 创建一个长度为5的空数组em2 = np.empty((2, 2)) # 创建一个2*2的空二维数组print("一维数组,长度为5", em1)print("二维数组,长度为2*2", em2) 输出结果: [9.96754604e-312 9.96754614e-312 2.60799828e-310 9.34609789e-307 0.00000000e+000][[6.95299778e-310 9.96747617e-312] [0.00000000e+000 6.95299776e-310]]
2. 使用arange函数创建arange是numpy自带的的一个方法,作用与range这个Python内置函数相差无几,都是生成数组 先导入numpy包 然后创建数组 print("*****ararge创建数组*****")aran_arr1 = np.arange(5)aran_arr2 = np.arange(5, 10)print("*****类型*****")print(type(aran_arr1))print(type(aran_arr2))print("*****数组*****")print(aran_arr1)print(aran_arr2)
3. 使用zeros函数生成数组zeros函数是numpy自带的方法,作用是生成指定数量的全0一维数组,全0二维数组等 看下面的例子: 生成一个具有三个元素的一维数组和一个具有五个元素的一维数组: #!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: Smly# @datetime: 2021/9/27 21:31 # @Version: 1.0import numpy as npzero_arr = np.zeros(3)zrro_arr2 = np.zeros(5)print(zero_arr)print(zrro_arr2) 运行结果: [0. 0. 0.] [0. 0. 0. 0. 0.]
当然这只是一位数组,你还可以生成二维数组,也就是矩阵 使用如下代码可以生成一个三行三列的矩阵 zero_arr3 = np.zeros((3, 3)) 输出看看: 运行结果: [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
4. ones函数生成数组使用ones函数生成全1函数,方法同zeros import numpy as npones_arr1 = np.ones(3) 输出结果: [1. 1. 1.]
生成一个三行三列的矩阵 import numpy as npones_arr2 = np.ones((3, 3)) 输出结果: [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]]
5. diag函数生成对角矩阵什么是对角矩阵?你应该听说过对角线,矩阵就是生成在对角线上的矩阵 函数参数是一个元祖 看代码和运行结果能够理解的更深刻 import numpy as npdiag_arr = np.diag((4, 3, 2, 1)) 将diag_arr的输出的结果为: [[4 0 0 0] [0 3 0 0] [0 0 2 0] [0 0 0 1]]
看,对角线是不是你函数的参数,这下理解了吧
6. N维数组N维数组就是多维数组,可以理解为数组里面还是数组,里面还是数组,可以参照这个形式 [[[1 2] [3 4]] [[5 6] [7 8]]]
这个概念确实有点抽象,有点难理解。这就是一个三维数组,是通过三维列表使用array方法转换成ndarray的 代码: #!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: Smly# @datetime: 2021/9/27 13:29 # @Version: 1.0import numpy as npli = [ [[1, 2], [3, 4]], [[5, 6], [7, 8]]]te1 = np.array(li)print(te1) 当然,二维数组也算是N维数组
2.3 访问数组元素numpy自带了一个insert 函数,可以往数组中插入元素 看实例: li = [[1, 2, 3, 4], [5, 6, 7, 8], [2, 4, 6, 8]]gb1 = np.array(li)np.insert(gb1, 1, [1, 2, 3, 4]) 输出结果: [1 1 2 3 4 2 3 4 5 6 7 8 2 4 6 8]
还有一个自带的add函数,可以进行数组的相加减 数组嘛,可以使用下标来获取数组元素 import numpy as npli1 = [1, 2, 3, 4]gb2 = np.array(li1)print(gb2[1]) 输出结果为: 2
当然,它是一个数组,你理所应当的也可以使用循环语句来遍历数组
三、了解矩阵数组是数组,矩阵是矩阵。 数组是一种数据结构,可以存储多种数据,可以有多维 矩阵是数学中的一个概念,只能存放数字,并且只能是二维的形式 生成矩阵的方法就和生成N维数组的方法是一样的 先使用列表创建二维列表,然后再使用numpy的方法转成矩阵,当然也有好几中生成矩阵的方法 import numpy as npli = [[1, 2, 3, 4], [5, 6, 7, 8]]j1 = np.matrix(li)print(j1)print(type(j1))print(j1.dtype) 输出该矩阵: 输出矩阵: [[1 2 3 4] [5 6 7 8]]矩阵在Python的类型: <class 'numpy.matrix'>在numpy中的类型: int32 矩阵可以进行各种数学运算,在numpy中都得到了很好的支持,这里就不细说了
3.1 广播何为广播,广播就是能将你的东西发送到各个区域,一般在计算机中是将信息发送到局域网络中的每个计算机中。 而在numpy中也有广播,只不过他是将元素自动补到数组,矩阵上,就像你在上面看到的,一个数组乘除一个元素,数组中的所有元素都会乘这个数 import numpy as npli1 = [1, 2, 3, 4]print(np.array(li1)*10) 输出结果: [10 20 30 40]
这个就是广播,就是将数字10播到li转成的数组中,能够让数组所有元素都乘10。 而不同维度的数组也可以这样 #!/usr/bin/env python# -*- coding: utf-8 -*-# @Author: Smly# @datetime: 2021/9/27 13:40 # @Version: 1.0import numpy as npli = [[1, 2, 3, 4], [5, 6, 7, 8], [2, 4, 6, 8]]gb1 = np.array(li)li1 = [1, 2, 3, 4]gb2 = np.array(li1)print(gb1*gb2) 将一维数组的每个元素挨个广播到二维数组,前提是: 二维数组中的一维数组的个数与一维数组的个数是相同的 运行结果: [[ 1 4 9 16] [ 5 12 21 32] [ 2 8 18 32]]
以上就是python扩展库numpy入门教程的详细内容,更多关于numpy库入门的资料请关注51zixue.net其它相关文章! Python完美还原超级玛丽游戏附代码与视频 Python实战项目刮刮乐的实现详解流程 |