<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>第 3 章：广播机制（Broadcasting） on 跟我学机器学习</title><link>https://machinelearningwithme.com/course/numpy/chapter03/</link><description>Recent content in 第 3 章：广播机制（Broadcasting） on 跟我学机器学习</description><generator>Hugo</generator><language>zh_CN</language><lastBuildDate>Sun, 25 Oct 2026 23:59:07 +0800</lastBuildDate><atom:link href="https://machinelearningwithme.com/course/numpy/chapter03/index.xml" rel="self" type="application/rss+xml"/><item><title>NumPy 广播机制详解：外和、按行缩放、两两差值、按列缩放与归一化 | NumPy 数组计算实战</title><link>https://machinelearningwithme.com/course/numpy/chapter03/core-concepts/</link><pubDate>Sun, 25 Oct 2026 09:30:00 +0800</pubDate><guid>https://machinelearningwithme.com/course/numpy/chapter03/core-concepts/</guid><description>&lt;h1 id="第-31-节-核心知识点"&gt;第 3.1 节 核心知识点&lt;a class="anchor" href="#%e7%ac%ac-31-%e8%8a%82-%e6%a0%b8%e5%bf%83%e7%9f%a5%e8%af%86%e7%82%b9"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;&lt;strong&gt;预计学习时长：&lt;/strong&gt; 40 分钟&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;本节目标：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;说得出广播的&lt;strong&gt;三条匹配规则&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;会用 &lt;code&gt;None&lt;/code&gt; / &lt;code&gt;np.newaxis&lt;/code&gt; 给数组&lt;strong&gt;加一个维度&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;会算&lt;strong&gt;外和&lt;/strong&gt;（两个一维数组两两相加）；&lt;/li&gt;
&lt;li&gt;会&lt;strong&gt;按行缩放&lt;/strong&gt;、&lt;strong&gt;按列缩放&lt;/strong&gt;，并且分得清 &lt;code&gt;[:, None]&lt;/code&gt; 和 &lt;code&gt;[None, :]&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;会做&lt;strong&gt;两两差值&lt;/strong&gt;和&lt;strong&gt;按列归一化&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 id="先搞清楚广播到底是什么"&gt;先搞清楚：广播到底是什么&lt;a class="anchor" href="#%e5%85%88%e6%90%9e%e6%b8%85%e6%a5%9a%e5%b9%bf%e6%92%ad%e5%88%b0%e5%ba%95%e6%98%af%e4%bb%80%e4%b9%88"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;广播 = NumPy 在运算之前，悄悄把你的数组「拉伸」成同一个形状。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;拉伸？听起来很玄，其实就是&lt;strong&gt;复制&lt;/strong&gt;——只不过复制是 NumPy 在底层帮你做的，&lt;strong&gt;不占你写的代码，也不占额外内存&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;先看一个最简单的例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;import&lt;/span&gt; &lt;span style="color:#0e84b5;font-weight:bold"&gt;numpy&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;as&lt;/span&gt; &lt;span style="color:#0e84b5;font-weight:bold"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#40a070"&gt;1.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;2.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;3.0&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;b &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#40a070"&gt;10.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;20.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;30.0&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;print&lt;/span&gt;(a &lt;span style="color:#666"&gt;+&lt;/span&gt; b)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;[11. 22. 33.]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;形状都是 &lt;code&gt;(3,)&lt;/code&gt;，长度一样，&lt;strong&gt;不需要广播&lt;/strong&gt;，直接逐个加。&lt;/p&gt;
&lt;p&gt;现在把 &lt;code&gt;b&lt;/code&gt; 缩短：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;print&lt;/span&gt;(a &lt;span style="color:#666"&gt;+&lt;/span&gt; &lt;span style="color:#40a070"&gt;5&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;[6. 7. 8.]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;5&lt;/code&gt; 是个标量，NumPy 把它当成「到处都是 5 的数组」——这就是最朴素的广播。&lt;/p&gt;
&lt;p&gt;再看一个稍微复杂的：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;matrix &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;1&lt;/span&gt;, &lt;span style="color:#40a070"&gt;2&lt;/span&gt;, &lt;span style="color:#40a070"&gt;3&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;4&lt;/span&gt;, &lt;span style="color:#40a070"&gt;5&lt;/span&gt;, &lt;span style="color:#40a070"&gt;6&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;row &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#40a070"&gt;10&lt;/span&gt;, &lt;span style="color:#40a070"&gt;20&lt;/span&gt;, &lt;span style="color:#40a070"&gt;30&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;print&lt;/span&gt;(matrix &lt;span style="color:#666"&gt;+&lt;/span&gt; row)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;[[11 22 33]
 [14 25 36]]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;matrix&lt;/code&gt; 是 &lt;code&gt;(3, 2)&lt;/code&gt;，&lt;code&gt;row&lt;/code&gt; 是 &lt;code&gt;(3,)&lt;/code&gt;。&lt;strong&gt;结果每行都加上了 &lt;code&gt;row&lt;/code&gt;&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>NumPy 编程练习：5 道动手题学会广播机制（外和、按行缩放、两两差值、按列缩放、归一化） | NumPy 数组计算实战</title><link>https://machinelearningwithme.com/course/numpy/chapter03/coding-exercises/</link><pubDate>Sun, 25 Oct 2026 09:30:00 +0800</pubDate><guid>https://machinelearningwithme.com/course/numpy/chapter03/coding-exercises/</guid><description>&lt;h1 id="第-32-节-编程练习"&gt;第 3.2 节 编程练习&lt;a class="anchor" href="#%e7%ac%ac-32-%e8%8a%82-%e7%bc%96%e7%a8%8b%e7%bb%83%e4%b9%a0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint note'&gt;
&lt;p&gt;&lt;strong&gt;预计学习时长：&lt;/strong&gt; 45 分钟&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;练习方式：&lt;/strong&gt; 新建一个 Jupyter Notebook，把下面的数据抄进去，然后&lt;strong&gt;每题独立完成&lt;/strong&gt;。做完先自己核对输出，再展开参考答案。&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="准备先把数据建好"&gt;准备：先把数据建好&lt;a class="anchor" href="#%e5%87%86%e5%a4%87%e5%85%88%e6%8a%8a%e6%95%b0%e6%8d%ae%e5%bb%ba%e5%a5%bd"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;import&lt;/span&gt; &lt;span style="color:#0e84b5;font-weight:bold"&gt;numpy&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;as&lt;/span&gt; &lt;span style="color:#0e84b5;font-weight:bold"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sales &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;120.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;135.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;150.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;165.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [ &lt;span style="color:#40a070"&gt;80.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;92.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;88.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;105.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;200.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;210.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;195.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;230.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [ &lt;span style="color:#40a070"&gt;60.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;72.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;85.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;78.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;150.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;145.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;160.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;175.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;city_names &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#4070a0"&gt;&amp;#34;北京&amp;#34;&lt;/span&gt;, &lt;span style="color:#4070a0"&gt;&amp;#34;上海&amp;#34;&lt;/span&gt;, &lt;span style="color:#4070a0"&gt;&amp;#34;广州&amp;#34;&lt;/span&gt;, &lt;span style="color:#4070a0"&gt;&amp;#34;深圳&amp;#34;&lt;/span&gt;, &lt;span style="color:#4070a0"&gt;&amp;#34;成都&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;quarter_names &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#4070a0"&gt;&amp;#34;Q1&amp;#34;&lt;/span&gt;, &lt;span style="color:#4070a0"&gt;&amp;#34;Q2&amp;#34;&lt;/span&gt;, &lt;span style="color:#4070a0"&gt;&amp;#34;Q3&amp;#34;&lt;/span&gt;, &lt;span style="color:#4070a0"&gt;&amp;#34;Q4&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#40a070"&gt;1.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;2.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;3.0&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;b &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#40a070"&gt;10.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;20.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;30.0&lt;/span&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="练习-1使用广播机制计算两个一维数组的外和矩阵"&gt;练习 1：使用广播机制计算两个一维数组的外和矩阵&lt;a class="anchor" href="#%e7%bb%83%e4%b9%a0-1%e4%bd%bf%e7%94%a8%e5%b9%bf%e6%92%ad%e6%9c%ba%e5%88%b6%e8%ae%a1%e7%ae%97%e4%b8%a4%e4%b8%aa%e4%b8%80%e7%bb%b4%e6%95%b0%e7%bb%84%e7%9a%84%e5%a4%96%e5%92%8c%e7%9f%a9%e9%98%b5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;题目：&lt;/strong&gt; 完成下面 4 个任务：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用广播算出 &lt;code&gt;a&lt;/code&gt; 和 &lt;code&gt;b&lt;/code&gt; 的&lt;strong&gt;外和矩阵&lt;/strong&gt;（每一对元素相加），存到 &lt;code&gt;outer_sum&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;打印 &lt;code&gt;outer_sum&lt;/code&gt; 和它的 &lt;code&gt;shape&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;打印 &lt;code&gt;outer_sum[0]&lt;/code&gt;，验证它就是「&lt;code&gt;a&lt;/code&gt; 的第 0 个元素分别加上 &lt;code&gt;b&lt;/code&gt; 的三个元素」；&lt;/li&gt;
&lt;li&gt;再算一个&lt;strong&gt;外积&lt;/strong&gt;（每一对元素相乘），存到 &lt;code&gt;outer_prod&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;思考题：&lt;/strong&gt; 为什么结果矩阵的形状是 &lt;code&gt;(3, 3)&lt;/code&gt; 而不是 &lt;code&gt;(3, 1)&lt;/code&gt; 或 &lt;code&gt;(1, 3)&lt;/code&gt;？&lt;/p&gt;</description></item><item><title>NumPy 常见问题答疑：10 个广播机制的疑问（匹配规则、加维度、外和、按行列缩放） | NumPy 数组计算实战</title><link>https://machinelearningwithme.com/course/numpy/chapter03/faq/</link><pubDate>Sun, 25 Oct 2026 09:30:00 +0800</pubDate><guid>https://machinelearningwithme.com/course/numpy/chapter03/faq/</guid><description>&lt;h1 id="第-33-节-常见问题"&gt;第 3.3 节 常见问题&lt;a class="anchor" href="#%e7%ac%ac-33-%e8%8a%82-%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;这一节收集了初学者在 NumPy &lt;strong&gt;广播机制&lt;/strong&gt;上最常卡的 10 个问题。每个问题都给出&lt;strong&gt;直接答案&lt;/strong&gt;，能跑代码的都附上完整示例。&lt;/p&gt;
&lt;blockquote class='book-hint tip'&gt;
&lt;p&gt;&lt;strong&gt;怎么用这一节&lt;/strong&gt;
不用通读。遇到问题用 Ctrl+F 搜关键词，直接跳到对应那条。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;准备一下数据，下面每题都会用到：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;import&lt;/span&gt; &lt;span style="color:#0e84b5;font-weight:bold"&gt;numpy&lt;/span&gt; &lt;span style="color:#007020;font-weight:bold"&gt;as&lt;/span&gt; &lt;span style="color:#0e84b5;font-weight:bold"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sales &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;120.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;135.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;150.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;165.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [ &lt;span style="color:#40a070"&gt;80.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;92.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;88.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;105.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;200.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;210.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;195.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;230.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [ &lt;span style="color:#40a070"&gt;60.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;72.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;85.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;78.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [&lt;span style="color:#40a070"&gt;150.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;145.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;160.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;175.0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#40a070"&gt;1.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;2.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;3.0&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;b &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;array([&lt;span style="color:#40a070"&gt;10.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;20.0&lt;/span&gt;, &lt;span style="color:#40a070"&gt;30.0&lt;/span&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="q1什么是-numpy-广播机制为什么需要广播"&gt;Q1：什么是 NumPy 广播机制？为什么需要广播？&lt;a class="anchor" href="#q1%e4%bb%80%e4%b9%88%e6%98%af-numpy-%e5%b9%bf%e6%92%ad%e6%9c%ba%e5%88%b6%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81%e5%b9%bf%e6%92%ad"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;答：&lt;/strong&gt; &lt;strong&gt;广播就是 NumPy 在运算前，悄悄把你的数组「拉伸」成同一个形状。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为什么需要它？因为真实数据里，&lt;strong&gt;「主体」和「系数」的长度往往不一样&lt;/strong&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sales &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;zeros((&lt;span style="color:#40a070"&gt;5&lt;/span&gt;, &lt;span style="color:#40a070"&gt;4&lt;/span&gt;)) &lt;span style="color:#60a0b0;font-style:italic"&gt;# (5, 4) 5 个城市 × 4 个季度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;factor &lt;span style="color:#666"&gt;=&lt;/span&gt; np&lt;span style="color:#666"&gt;.&lt;/span&gt;ones(&lt;span style="color:#40a070"&gt;5&lt;/span&gt;) &lt;span style="color:#60a0b0;font-style:italic"&gt;# (5,) 5 个城市各自的系数&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果没有广播，你得写一层 for 循环把系数贴到每一行；有广播，&lt;strong&gt;一行搞定&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020"&gt;print&lt;/span&gt;(sales &lt;span style="color:#666"&gt;*&lt;/span&gt; factor[:, &lt;span style="color:#007020;font-weight:bold"&gt;None&lt;/span&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;拉伸的本质是「复制」&lt;/strong&gt;——但 NumPy 在底层用「重复读取同一块内存」的方式实现，&lt;strong&gt;不占额外内存、不复制数据&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote class='book-hint tip'&gt;
&lt;p&gt;&lt;strong&gt;一句话：广播 = 隐式的 &lt;code&gt;np.tile&lt;/code&gt; + 隐式的逐元素运算。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="q2numpy-广播规则的核心判断条件是什么"&gt;Q2：NumPy 广播规则的核心判断条件是什么？&lt;a class="anchor" href="#q2numpy-%e5%b9%bf%e6%92%ad%e8%a7%84%e5%88%99%e7%9a%84%e6%a0%b8%e5%bf%83%e5%88%a4%e6%96%ad%e6%9d%a1%e4%bb%b6%e6%98%af%e4%bb%80%e4%b9%88"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;答：&lt;/strong&gt; &lt;strong&gt;从右往左逐维比较，三条规则：&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>