当前位置: 首页>前端>正文

python 列表定义向量 python定义一个向量

本节主要讲 Python 中的 numpy 一维数组的特性,以及与行向量或列向量的区别。并介 绍了老师在实际应用中的一些小技巧,去避免在 coding 中由于这些特性而导致的 bug。

Python 的特性允许你使用广播(broadcasting)功能,这是 Python numpy 程序语言库中最灵活的地方。而我认为这是程序语言的优点,也是缺点。优点的原因在于它们创造出语言的表达性,Python 语言巨大的灵活性使得你仅仅通过一行代码就能做很多事情。但是这也是缺点,由于广播巨大的灵活性,有时候你对于广播的特点以及广播的工作原理这些细节不熟悉的话,你可能会产生很细微或者看起来很奇怪的 bug。例如,如果你将一个列向量添加到一个行向量中,你会以为它报出维度不匹配或类型错误之类的错误,但是实际上你会得到一个行向量和列向量的求和。

Python 的这些奇怪的影响之中,其实是有一个内在的逻辑关系的。但是如果对 Python不熟悉的话,我就曾经见过的一些学生非常生硬、非常艰难地去寻找 bug。所以我在这里想做的就是分享给你们一些技巧,这些技巧对我非常有用,它们能消除或者简化我的代码中所有看起来很奇怪的 bug。同时我也希望通过这些技巧,你也能更容易地写没有 bug 的 Python numpy 代码。




python 列表定义向量 python定义一个向量,python 列表定义向量 python定义一个向量_python 列表定义向量,第1张


python 列表定义向量 python定义一个向量,python 列表定义向量 python定义一个向量_Python_02,第2张


所以我建议当你编写神经网络时,不要在它的 shape 是(5, )还是(, )或者一维数组时使用数据结构。相反,如果你设置 为(5,1),那么这就将置于 5 行 1 列向量中。在先前的操 作里 和 的转置看起来一样,而现在这样的 变成一个新的 的转置,并且它是一 个行向量。请注意一个细微的差别,在这种数据结构中,当我们输出 的转置时有两对方 括号,而之前只有一对方括号,所以这就是 1 行 5 列的矩阵和一维数组的差别。


python 列表定义向量 python定义一个向量,python 列表定义向量 python定义一个向量_数组_03,第3张


如果你输出 和 的转置的乘积,然后会返回给你一个向量的外积,是吧?所以这两 个向量的外积返回给你的是一个矩阵。


python 列表定义向量 python定义一个向量,python 列表定义向量 python定义一个向量_数组_04,第4张


python 列表定义向量 python定义一个向量,python 列表定义向量 python定义一个向量_python 初始化一个4维向量_05,第5张


python 列表定义向量 python定义一个向量,python 列表定义向量 python定义一个向量_数组_06,第6张


我写代码时还有一件经常做的事,那就是如果我不完全确定一个向量的维度(dimension), 我经常会扔进一个断言语句(assertion statement)。像这样,去确保在这种情况下是一个(5,1) 向量,或者说是一个列向量。这些断言语句实际上是要去执行的,并且它们也会有助于为你 的代码供信息。所以不论你要做什么,不要犹豫直接插入断言语句。如果你不小心以一维 数组来执行,你也能够重新改变数组维数 = h,表明一个(5,1)数组或者一个(1,5) 数组,以致于它表现更像列向量或行向量。


python 列表定义向量 python定义一个向量,python 列表定义向量 python定义一个向量_Python_07,第7张


我有时候看见学生因为一维数组不直观的影响,难以定位 bug 而告终。通过在原先的代 码里清除一维数组,我的代码变得更加简洁。而且实际上就我在代码中表现的事情而言,我 从来不使用一维数组。因此,要去简化你的代码,而且不要使用一维数组。总是使用 × 1 维矩阵(基本上是列向量),或者 1 × 维矩阵(基本上是行向量),这样你可以减少很多 assert 语句来节省核矩阵和数组的维数的时间。另外,为了确保你的矩阵或向量所需要的维 数时,不要羞于 reshape 操作。

总之,我希望这些建议能帮助你解决一个 Python 中的 bug,从而使你更容易地完成练习。


https://www.xamrdz.com/web/2fd1928874.html

相关文章: