深度学习:(四)python中的广播

广播

在python中,广播可以简化为"自动扩展匹配"

注意:python中的矩阵运算,都是对应位置的元素之间的运算,即"点运算"。

在神经网络中,主要会用到的两种情况:

  • 向量与常数:

    n n n 维行向量( 1 × n 1×n 1×n 矩阵)和常数进行运算,python 会自动将该常数复制填充成 1 × n 1×n 1×n 矩阵( n n n 维列向量同理,就不写例子了)。

    1 2 3 \] + 100 → \[ 1 2 3 \] + \[ 100 100 100 \] = \[ 101 102 103 \] \\left\[ \\begin{matrix} 1\\\\ 2\\\\ 3\\\\ \\end{matrix} \\right\]+100→\\left\[ \\begin{matrix} 1\\\\ 2\\\\ 3\\\\ \\end{matrix} \\right\]+\\left\[ \\begin{matrix} 100\\\\ 100\\\\ 100\\\\ \\end{matrix} \\right\]=\\left\[ \\begin{matrix} 101\\\\ 102\\\\ 103\\\\ \\end{matrix} \\right\] 123 +100→ 123 + 100100100 = 101102103

    m × n m×n m×n 矩阵和 n n n 维行向量( 1 × n 1×n 1×n 矩阵)进行运算。python 会自动将该 1 × n 1×n 1×n 矩阵复制填充成 m × n m×n m×n 矩阵( m m m 维列向量同理)。

    举例:

    1 2 3 4 5 6 \] + \[ 100 200 300 \] → \[ 1 2 3 4 5 6 \] + \[ 100 200 300 100 200 300 \] = \[ 101 202 303 104 205 306 \] \\left\[ \\begin{matrix} 1 \& 2 \& 3\\\\ 4 \& 5 \& 6 \\\\ \\end{matrix} \\right\]+\\left\[ \\begin{matrix} 100 \& 200 \& 300\\\\ \\end{matrix} \\right\]→\\left\[ \\begin{matrix} 1 \& 2 \& 3\\\\ 4 \& 5 \& 6 \\\\ \\end{matrix} \\right\]+\\left\[ \\begin{matrix} 100 \& 200 \& 300\\\\ 100 \& 200 \& 300\\\\ \\end{matrix} \\right\]=\\left\[ \\begin{matrix} 101 \& 202 \& 303\\\\ 104 \& 205 \& 306\\\\ \\end{matrix} \\right\] \[142536\]+\[100200300\]→\[142536\]+\[100100200200300300\]=\[101104202205303306

    1 2 3 4 5 6 \] + \[ 100 200 \] → \[ 1 2 3 4 5 6 \] + \[ 100 100 100 200 200 200 \] = \[ 101 102 103 204 205 206 \] \\left\[ \\begin{matrix} 1 \& 2 \& 3\\\\ 4 \& 5 \& 6 \\\\ \\end{matrix} \\right\]+\\left\[ \\begin{matrix} 100\\\\ 200\\\\ \\end{matrix} \\right\]→\\left\[ \\begin{matrix} 1 \& 2 \& 3\\\\ 4 \& 5 \& 6 \\\\ \\end{matrix} \\right\]+\\left\[ \\begin{matrix} 100 \& 100 \& 100\\\\ 200 \& 200 \& 200\\\\ \\end{matrix} \\right\]=\\left\[ \\begin{matrix} 101 \& 102 \& 103\\\\ 204 \& 205 \& 206\\\\ \\end{matrix} \\right\] \[142536\]+\[100200\]→\[142536\]+\[100200100200100200\]=\[101204102205103206

☆以上两种情况,两个矩阵的行和列必须要有一个维度相同。

实例

python 复制代码
import numpy as np
# 定义矩阵A
A = np.array([[56.0,0.0,4.4,68.0]
			  [1.2,104.0,52.0,8.0],
			  [1.8,135.0,99.0,0.9]])
# 沿着矩阵A的纵轴求和
cal = A.sum(axis=0) # axis=1就是沿着横轴求和
print(cal)
# 进行矩阵广播运算
percentage = 100*A/cal.reshape(1,4)
print(percentage)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# 输出结果为:
[59  239  155.4  76.9]

[[94.91525424  0.            2.83140283  88.42652796]
 [ 2.03389831  43.51464435  33.46203346  10.40312094]
 [ 3.05084746  56.48535565  63.70656371   1.17035111]]

代码编写技巧

  • 在创建数组时,数组的维度要交代清楚,行数和列数都要给出:

    • 正确的:

      python 复制代码
      a = np.random.randn(5,1)  
      # 使用numpy的random模块中的randn函数生成一个5行1列的数组,  
      # 该数组中的元素是从标准正态分布(均值为0,标准差为1的正态分布)中随机抽取的。 
      # 输出结果为五行一列的数组
    • 错误的:

      python 复制代码
      a = np.random.randn(5)  
      # 目的和上边代码块一样
      # 但是没有指代清楚行数和列数,导致输出结果为一个秩为1的数组,既不是行向量,也不是列向量
  • 常用附加代码:

    python 复制代码
    assert a.shape == (5,1)    # 或者
    assert(a.shape == (5,1))   # 或者
    assert[a.shape == (5,1)]   # 在pycharm中通常使用这一个
    
    # 这是一个断言语句,用于确保变量a的shape属性(即a的维度)等于(5,1)。
    # 如果断言的条件为假(即表达式的结果为False),则会引发一个AssertionError异常。
    python 复制代码
    a = a.reshape((5,1))
    # 将变量a转换成五行一列的数组。
相关推荐
威联通网络存储2 小时前
某高端显示面板制造企业:基于威联通 TS-h2490FU 的 AOI 检测数据治理实践
python·制造
小程故事多_805 小时前
OpenClaw工具引擎架构全解析,AI Agent的“双手”如何落地实操
人工智能·架构·aigc·ai编程·openclaw
qq_452396235 小时前
【AI 架构师】第十篇:Agent 工业化部署 —— 从 FastAPI 到云端全链路监控
网络·人工智能·ai·fastapi
前端摸鱼匠5 小时前
【AI大模型春招面试题11】什么是模型的“涌现能力”(Emergent Ability)?出现条件是什么?
人工智能·算法·ai·自然语言处理·面试·职场和发展
新缸中之脑5 小时前
如何合法地逆向SynthID
人工智能
FreakStudio6 小时前
不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico
python·单片机·嵌入式·电子diy·tinyml
剑穗挂着新流苏3126 小时前
115_PyTorch 实战:从零搭建 CIFAR-10 完整训练与测试流水线
人工智能·pytorch·深度学习·神经网络
Veggie266 小时前
【Java深度学习】PyTorch On Java 系列课程 第八章 17 :模型评估【AI Infra 3.0】[PyTorch Java 硕士研一课程]
java·人工智能·深度学习
m0_743470377 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
链上杯子7 小时前
《2026 LangChain零基础入门:用AI应用框架快速搭建智能助手》第8课(完结篇):小项目实战 + 部署 —— 构建网页版个人知识库 AI 助手
人工智能·langchain