深度学习基础--NumPy

NumPy

深度学习中经常出现数组和矩阵运算,NumPy的数组类中提供了很多便捷方法,对经常用的一些NumPy的相关操作所作的整理。

参考书籍:

深度学习入门 : 基于Python的理论与实现 / (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电出版社, 2018.7(2019.5重印)

NumPy的导入

  • 外部库的安装:

    1.在命令行界面直接运行

    pip install numpy
    

    2.使用anaconda虚拟环境,使用conda命令

    conda activate 虚拟环境路径地址
    conda install numpy
    
  • 库的导入

    import numpy as np  # 导入库的常用语句,导入NumPy库并重命名为np
    

NumPy一维数组(向量)基础操作

import numpy as np

"""NumPy一维数组相关运算"""

x = np.array([1.0, 2.0, 3.0])  # 生成numpy数组
y = np.array([2.0, 4.0, 6.0])  # 生成numpy数组

print(f"x:{x}")
print(f"y:{y}")

print(f"x + y = {x + y}")  # 对应元素相加
print(f"x * y = {x * y}")  # 对应元素相乘
print(f"x / y = {x / y}")  # 对应元素相除

print(f"x / 2.0 = {x / 2.0}")  # numpy数组的各个元素和标量之间进行运算(广播功能)

注意:

  1. 数组x和数组y之间的运算需要注意,两个数组的元素个数必须保持一致,个数不同会报错。

  2. 数组与单一的数值(标量)组合运算时,其底层原因是NumPy运算的广播功能。上面代码中数组与标量运算时,标量 2.0 2.0 2.0会被扩展成 1 × 3 1\times 3 1×3的向量。

NumPy的 N N N维数组(矩阵)基础运算

import numpy as np

"""NumPy的N维数组(矩阵)相关运算"""

x = np.array([[1, 2], [3, 4]])  # 创建一个二维数组,即2×2的矩阵x
y = np.array([[5, 6], [7, 8]])

print(f"x:\n{x}")  # 打印输出x
print(f"y:\n{y}")  # 打印输出y
print(x.shape)  # 矩阵x的维数:2×2
print(x.dtype)  # 矩阵x中元素的类型

print(f"x + y = \n{x + y}")  # 对应元素相加
print(f"x * y = \n{x * y}")  # 对应元素相乘

print(f"x * 10=\n{x * 10}")  # x矩阵每个元素都乘10

注意:

  1. 上述NumPy的矩阵运算与线性代数中的矩阵运算方式不同,上述代码中矩阵乘法是对应元素相乘。
  2. 矩阵与标量的运算同样遵循广播规则。

广播

在这里插入图片描述

矩阵与标量10相乘时,标量10被扩展成了 2 × 2 2\times 2 2×2的形状,然后再与矩阵进行乘法运算,这个功能称为广播。(《深度学习入门:基于Python的理论与实现》P14,1.5.5节)

广播不止会应用在矩阵和标量的运算中,不同形状的数组之间也可以进行运算。

在这里插入图片描述

import numpy as np

x = np.array([[1, 2], [3, 4]])
y = np.array([10, 20])

print(f"x * y = \n{x * y}")

注意:

  1. 即使有广播功能,但是矩阵的列数应该保持一致,否则同样会报错。

Numpy矩阵元素的访问

NumPy矩阵的元素访问同数组一样,索引下标从0开始。

import numpy as np

"""NumPy矩阵元素的访问"""

x = np.array([[1, 2], [3, 4], [5, 6]])

print(f"x:\n{x}")

print(f"x[0]: {x[0]}")  # x矩阵的第0行[1, 2]
print(f"x[0][1]: {x[0][1]}")  # x矩阵的第0行下标索引为1的元素2

NumPy可以使用数组访问各个元素:

使用这种方式可以快速提取出数组中满足一定条件的元素

import numpy as np

"""NumPy矩阵元素的访问"""

x = np.array([[1, 2], [3, 4], [5, 6]])

print(f"x:\n{x}")

x = x.flatten()  # 将x矩阵转换为一维数组(向量)
print(f"x:{x}")

print(f"{x[np.array([0, 1, 3])]}")  # 使用数组访问x中索引为0, 1, 3的各个元素

print(f"{x[x>3]}")  # 输出x中大于3的元素

注意:

  1. NumPy数组使用不等号运算符,结果会得到一个布尔型的数组,上面代码中最后一行原理就是根据这个布尔型数组,取出值大于3结果为True对应的元素。

参考书籍:
深度学习入门 : 基于Python的理论与实现 / (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电出版社, 2018.7(2019.5重印)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值