lugl4313820 发表于 2025-1-21 11:13

《Hello算法》3、独到的在线学习方法

<div class='showpostmsg'><p>《Hello算法》提供了跟纸质书不一样的阅读体验,那就是可以在线阅读,不需要携带纸质书,还有就可以一个非常好的功能,就是能在线用动画片进行在线观看程序中实际的运行效果。代码可以实时看到Python、C++等多种语的源代码:</p>

<p>&nbsp; 而下面还有可视化运行:</p>

<p>&nbsp; 【小结】</p>

<p>阅读网页版,相比纸质书要方便很多。</p>

<p>如果您没有拿到纸质书,在线学习也是一种美好的体验。<a href="https://www.hello-algo.com/chapter_computational_complexity/iteration_and_recursion/#3" target="_blank">https://www.hello-algo.com/chapter_computational_complexity/iteration_and_recursion/#3</a></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

秦天qintian0303 发表于 2025-1-22 09:29

<p>感觉都是这个出版社搞得,同类型的好像都有在线学习资源,《Python编程:从入门到实践(第3版)》估计也有</p>

秦天qintian0303 发表于 2025-1-22 09:30

<p>一边学一边练,效果还是不错的&nbsp;&nbsp;</p>

lugl4313820 发表于 2025-1-22 09:31

秦天qintian0303 发表于 2025-1-22 09:30
一边学一边练,效果还是不错的&nbsp;&nbsp;

<p>跟着书自己录了一篇,收获挺大,就是有点慢,学起来也有点困难。</p>

秦天qintian0303 发表于 2025-1-22 09:34

lugl4313820 发表于 2025-1-22 09:31
跟着书自己录了一篇,收获挺大,就是有点慢,学起来也有点困难。

<p>重点看一下自己感兴趣的算法就OK了&nbsp;&nbsp;</p>

lugl4313820 发表于 2025-1-22 10:00

<p>用张量进行代数运算</p>

<p>作者详细阐述如何用张量进行代数运算。重点关注一阶张量(向量)和二阶张量(矩阵)。</p>

<p>将从数组运算讲起,这里的数组运算指的是在NumPy这类组件中,按元素对数组的每一维进行操作的运算。接下来,我会专门介绍针对向量的运算类型,这些内容用于为关键的矩阵运算搭建舞台。</p>

<p>5.2.1 数组运算</p>

<p>先定义几个数组</p>

<pre>
<code>&gt;&gt;&gt; a = np.array([,])
&gt;&gt;&gt; b = np.array([,])
&gt;&gt;&gt; c = np.array()
&gt;&gt;&gt; d = np.array()
&gt;&gt;&gt; print(a)
[
]
&gt;&gt;&gt; print(c)

&gt;&gt;&gt; print(d)

&gt;&gt;&gt; </code></pre>

<p>当数组的大小完全匹配是,按元素进行代数运算是很简单的::</p>

<pre>
<code>&gt;&gt;&gt; print(a+b)
[[ 8 10 12]
]
&gt;&gt;&gt; print(a-b)
[[-6 -6 -6]
[-6 -6 -6]]
&gt;&gt;&gt; print(a*b)
[[ 7 16 27]
]
&gt;&gt;&gt; print(a/b)
[
]
&gt;&gt;&gt; print(b**a)
[[      7      64   729]
]
&gt;&gt;&gt;
</code></pre>

<p>上面的试验,可以看到NumPy会在对应位置的元素之间完成指定的代数运算。两个矩阵按元素相乘称为阿达马积(深度学习中会经常看到这个术语)。</p>

<p>NumPy对按元素运算的思想进行了扩展,这就是广播的时候,NumPy会基于一些规则,让一个数组遍历另一个数组以得到有意义的结果。</p>

<p>当我们使用标量与数组运算时,实际上就是将标量广播给数组中的每一个值。</p>

<p>在下面的一个代码中,虽然a是一个2*3的矩阵,但是NumPy可以用它与三元向量C进行运算,这里就用到了广播。</p>

<pre>
<code>&gt;&gt;&gt; print(a+c)
[
]
&gt;&gt;&gt; print(c*a)
[
]
&gt;&gt;&gt; print(a/c)
[
]
&gt;&gt;&gt; </code></pre>

<p>三元向量c被广播给2*3的矩阵a中的第一行。当NumPy发现三元向量C和矩阵a的最后几维相同时,就会用三元向量c遍历整个矩阵a。当你阅读深度学习领域的一些Python源码时,你会经常看到这类的操作。有时候,你需要思考一下自己在做什么。当无法达人定时,你可以利用Python命令行做一些实验。</p>

<p>那么能否用二元向量d对2*3的矩阵a进行广播呢?如果直接按照上面使用的三元向量对矩阵a进行广播的方式,系统就会报错:</p>

<pre>
<code>&gt;&gt;&gt; print(a+d)
Traceback (most recent call last):
File "&lt;stdin&gt;", line 1, in &lt;module&gt;
ValueError: operands could not be broadcast together with shapes (2,3) (2,) </code></pre>

<p>好在NumPy提供了适用于一维输入广播机制的方案,虽然d是一个二元向量,但如果我们把d转换成一个2*1的二维数组,NumPy就可以用它进行广播了。</p>

<pre>
<code>&gt;&gt;&gt; d = d.reshape((2,1))
&gt;&gt;&gt; d.shape
(2, 1)
&gt;&gt;&gt; print(a+d)
[
]</code></pre>

<p>现在,NumPy把d加到了矩阵a的每一个列上。</p>

<p>&nbsp;</p>

lugl4313820 发表于 2025-1-22 10:22

<p>向量运算</p>

<p>在代码中,向量被表示为数字的集合,每个数字可以视作某一坐标的取值。在这里,我们定义几个专用于向量的运算符。</p>

<p>1、模长</p>

<p>在几何上,我们可以把向量看作含有方向和大小的量。向量的大小又称为向量的模长,对于n元向量x来说模长的计算公式为:</p>

<p><img alt="\left \| x \right \| = \sqrt{x_{0}^{2} +{x_{1}^{2}} + ... +{x_{n-1}^{2}}}" src="https://bbs.eeworld.com.cn/gif.latex?%5Cleft%20%5C%7C%20x%20%5Cright%20%5C%7C%20%3D%20%5Csqrt%7Bx_%7B0%7D%5E%7B2%7D%20&amp;plus;%7Bx_%7B1%7D%5E%7B2%7D%7D%20&amp;plus;%20...%20&amp;plus;%7Bx_%7Bn-1%7D%5E%7B2%7D%7D%7D" /></p>

<p>以上公式中,向量x两边的双竖杠表示向量的模长。向量的模长有时也用单竖杠来表示,但由于单竖杠也可以表示绝对值,因此我们通常需要结合上下文来解读单竖杠的含义。</p>

<p>那么上面公式是如何来的?考虑向量x=(x,y)。如果x和y是二维向量x沿轴,y轴方向的长度,那么x和y便构成了一个直角三角形的两条直角边,这个直角三形的斜边长度就是向量的长度。因此毕达哥拉斯或古巴比化人的理论,这一长度为<img alt="\sqrt{x^{2} + y^{2}}" src="https://bbs.eeworld.com.cn/gif.latex?%5Csqrt%7Bx%5E%7B2%7D%20&amp;plus;%20y%5E%7B2%7D%7D" />&nbsp;。将上述形扩广到n元向量,于是就有了上面的公式。</p>

<p>&nbsp;</p>
页: [1]
查看完整版本: 《Hello算法》3、独到的在线学习方法