Python(八)


NumPy

  1. NumPy中,np.array()接收Python列表作为参数,生成NumPy数组(numpy.ndarray)

    import numpy as np # 导入库
    x = np.array([1.0, 2.0, 3.0]) # 生成numpy数组
    print(x) # [1. 2. 3.]
    type(x) # numpy.ndarray
    y = np.array([2.0, 4.0, 6.0])
    print(x + y) # [3. 6. 9.]
    print(x - y) # [-1. -2. -3.]
    print(x * y) # [ 2.  8. 18.]
    print(x / y) # [0.5 0.5 0.5]
  2. “对应元素的”的英文是element-wise,NumPy数组不仅可以进行element-wise运算,也可以和单一的数值(标量)组合起来进行运算。此时,需要在NumPy数组的各个元素和标量之间进行运算。 这个功能也被称为广播。

    x = np.array([1.0, 2.0, 3.0])
    x / 2.0 # array([0.5, 1. , 1.5])
  3. NumPy不仅可以生成一维数组(排成一列的数组),也可以生成多维数组。

    # 生成二维数组
    A = np.array([[1, 2], [3, 4]])
    print(A)
    # [[1 2]
    # [3 4]]
    A.shape # (2, 2) 生成一个2*2的矩阵A
    A.dtype # dtype('int32') 矩阵元素的数据类型
    B = np.array([[3, 0], [0, 6]])
    A + B
    A * B # 不是矩阵乘法,仍然是对应元素相乘
    A * 10 # 基于广播,数乘

    矩阵的形状可以通过shape查看,矩阵元素的数据类型可以通过dtype查看

  4. 广播:NumPy中,形状不同的数组之间也可以进行运算。前例中,标量10被扩展成了2×2的形状,然后再与矩阵A进行乘法运算。这个巧妙的功能叫做广播(broadcast)。

    image-20230908171921214
    A = np.array([[1, 2], [3, 4]])
    B = np.array([10, 20])
    C = A * B
    C.shape # (2,2)
    image-20230908172508990
  5. NumPy可以通过索引访问元素,也可以使用数组访问各个元素。

    X = np.array([[51, 55], [14, 19], [0, 4]])
    print(X)
    print(X[0]) # [51 55] 第0行
    print(X[0][1]) # 55
    # 也可以使用for访问各个元素
    for row in X:
        print(row)
    # 使用数组访问各个元素
    X = X.flatten() # 将X转化为一维数组
    print(X)
    X[np.array([0, 2, 4])] # 获取索引为0,2,4的元素 array([51, 14,  0])
    X > 15 # array([ True,  True, False,  True, False, False])
    X[X>15] # array([51, 55, 19])

    运用这个标记法可以获取满足一定条件的元素。对NumPy数组使用不等号运算符等(上例中是X > 15),结果会得到一个布尔型的数组。上例中就是使用这个布尔型数组取出了数组的各个元素(取出True对应的元素)。

Matplotlib

  1. 绘制图形

    import numpy as np
    import matplotlib.pyplot as plt
    # 生成数据
    x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0-6的数据
    y = np.sin(x)
    # 绘制图形
    plt.plot(x, y)
    plt.show()

    使用NumPy的arange方法生成了[0, 0.1, 0.2,…, 5.8, 5.9]的数据,将其设为x。对x的各个元素,应用NumPy的sin函数np.sin(),将x、y的数据传给plt.plot方法,然后绘制图形。最后,通过**plt.show()**显示图形。

  2. pyplot的功能:添加标题标签等功能

    import numpy as np 
    import matplotlib.pyplot as plt
    
    # 生成数据
    x = np.arange(0, 6, 0.1)
    y1 = np.sin(x)
    y2 = np.cos(x)
    
    plt.plot(x, y1, label="sin")
    plt.plot(x, y2, linestyle = "--", label="cos") #用虚线绘制
    plt.xlabel("x") #x轴标签
    plt.ylabel("y") #y轴标签
    plt.title('sin & cos') #标题
    plt.legend()
    plt.show()
    image-20230909100655581
  3. pyplot提供显示图像的方法imshow()、matplotlib.image模块提供imread()方法读入图像

    import matplotlib.pyplot as plt
    from matplotlib.image import imread
    img = imread('./tutu/0.png') #读入图像
    plt.imshow(img)
    plt.show()

补充

from...import *语句和import的区别

  • import 模块:导入一个模块;注:相当于导入的是一个文件夹,是个相对路径。

  • from…import:导入了一个模块中的一个函数;注:相当于导入的是一个文件夹中的文件,是个绝对路径。

  • 所以使用上的的区别是当引用文件时是:

    import 导入模块,每次使用模块中的函数都要是定是哪个模块。

    from…import * 导入模块,每次使用模块中的函数,直接使用函数就可以了;注因为已经知道该函数是那个模块中的了。

参考书目:《深度学习入门:基于Python的理论与实现》

https://www.ituring.com.cn/book/1921


文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录