python中reshape函数用法(了解python内置函数)

今天这篇是numpy专题的第四篇文章,numpy中的数组重塑与三元表达式。

首先我们来看数组重塑,所谓的重塑本质上就是改变数组的shape。在保证数组当中所有元素不变的前提下,变更数组形状的操作。比如常用的操作主要有两个,一个是转置,另外一个是reshape。

转置与reshape

转置操作很简单,它对应线性代数当中的转置矩阵这个概念,也就是说它的功能就是将一个矩阵进行转置

转置矩阵的定义是将一个矩阵的横行写为转置矩阵的纵列,把纵列写成转置矩阵的横行。这个定义的是二维的矩阵,本质上来说,转置操作其实是将一个矩阵沿着矩阵的大对角线进行翻转。翻转之后,显然这个矩阵的各个维度都会发生变化。

其中二维的矩阵最直观,一个4 x 3的矩阵,转置之后得到的是3 x 4的矩阵。如果维度更多呢?如果是3 x 2 x 4的矩阵转置之后会得到什么?

很简单,得到的会是4 x 2 x 3的矩阵。我们都知道,如果我们把一个矩阵各个维度的大小写在一起,会得到一个元组(tuple),这个元组称为矩阵的shape,我实在是不知道该怎么翻译这个单词,但是我觉得叫做形状不太妥当,所以就保留了英文原文。转置之后,矩阵的shape会整个翻转。比如(3, 2, 4)会变成(4, 2, 3)。

我们可以来看一个例子,会更加的直观。首先我们先看最简单的二维矩阵:

这是随机出来的一个3 x 4的二维矩阵,在numpy当中,有两种方式获取一个矩阵或者是数组的转置。第一种方式是通过在数组的变量名之后加上.T操作符,第二种方式是调用numpy中的transpose函数,这两种方式是一样的。我个人比较倾向于前者,写起来比较简单。

我们可以看到转置之后新的矩阵的第一列其实是原矩阵的第一行,第一行是原矩阵的第一列。可以看成是原矩阵按照从左上角到右下角的一条无形的线翻转之后的结果。

理解了转置之后,我们再来看reshape操作。其实我们从这个单词上也能大概猜到它的意思,reshape也就是再次shape的意思,本意是根据我们想要的shape重新组装矩阵当中的元素

我们来看一个例子吧,首先,我们通过arange方法来获取一个一维的数组:

因为是1维的,所以我们去看它的shape也只有一维。假设我们不喜欢这样的一维数组,而想把它变成3 x 4或者是6 x 2的格式,这时候使用reshape就会很方便。

本质上来说reshape操作其实就是按照顺序从矩阵当中获取元素,然后按照我们制定的shape填充出一个新的矩阵的操作。这个应该不难理解, 它也是非常常用的重塑操作,通过reshape和转置,我们可以很方便地操作矩阵的大小,根据我们的需要作出改变。

三元表达式

在许多编程语言当中我们经常会用到三元表达式,三元表达式其实本质就是if-else语句,只是我们用特殊的方法将它简写。

比如说在C++当中,我们可以把if condition A else B简写成:condition ? A : B。Python同样支持三元表达式,不过对C++的三元表达式做了一些改动,在Python当中三元表达式写成:A if condition else B。相对来说更加直观一些,我们经常会在数组初始化的时候用到三元表达式。

比如,我们可能会这样生成一个数组:

arr = [1 if condition else 0 for _ in range(10)]

我们通过条件来判断了每一位是1还是0来生成了一个数组,简化了代码。在numpy当中同样继承了这个用法,我们一样可以使用三元表达式,不过numpy将它封装进了where函数当中,我们是通过调用一个方法来实现三元表达式的功能。我们来看下具体的用法,假设我们有两个数组:

我们还有一个bool型的数组c,我们希望根据c数组选择从a数组或者是b数组当中获取数据。我们可以使用where写成这样:

在这个例子当中,c数组中的1和0分别表示True和False。当我们调用np.where的时候,numpy会自动根据c数组当中的值去选择从a数组还是b数组当中获取数据。相当于我们执行了这么一段代码:

[x if c else y for c, x, y in zip(c, a, b)]

虽然两者的运行结果是一样的,但是显然使用循环的方法计算耗时更长,而使用numpy的向量做法运算速度更快。除此之外,numpy的where方法还支持高维的数组,但是循环的方法不行。并且where还有一些更高级的用法,比如说我们传入的第二个和第三个参数,可以不是数组而是一个标量。比如我们可以指定当c中的元素是True的时候填入1,否则填入-1:

甚至我们还可以将标量和向量结合起来使用:

并且这里的数组c也可以替换成逻辑运算:

总结

今天的文章主要介绍了Numpy当中的reshape、转置以及where的用法,这些也是numpy的基础用法,尤其是转置、reshape,几乎是处理数据必用的方法。所以想要从事Python机器学习或者是人工智能的小伙伴,numpy的这些用法是一定要会的。

本文当中介绍的只是numpy的一些固定套路,但其实numpy很多的用法是可以组合的,一些看似平淡无奇的用法组合在一起之后会有神奇的效果。这一点光看书或者是资料是很难穷尽的,所以如果你已经学会了这些api的基本使用,接下来最应该做的是去读一些大牛的源码,看看大牛们是如何运用这些工具的,相信一定还会有新的收获。

感谢您访问:美文云网站!本文永久链接:https://meiwenyun.com/429038.html。侵删或不良信息举报请联系邮箱:820608633@qq.com或微信:meiwenyun888。
上一篇 2024年8月19日 03:46
下一篇 2024年8月19日 03:46

相关推荐

  • ps怎么做倒影效果(ps换天空怎样制造倒影)

    水波倒影效果图 今天教大家用PS做一个水波倒影,首先打开PS,打开需要做倒影的图片。用矩形选框工具,框选出需要做水波倒影的区域,然后复制图层。 框选出需要做水波倒影的区域 接下来我…

    2024年8月17日
    100
  • 面粉发霉了怎么处理

    面粉发霉如果不严重可以筛除霉块,暴晒后继续食用,如果面粉量大且发霉严重,建议停止食用以免对身体造成伤害,不能吃的面粉可以当做清洁剂,清洗有油渍的衣服和厨房油污严重的各种厨具等,还可…

    2023年1月2日
    233
  • 女人精致短句

    女人精致短句供您参考 人生苦短,我用唇膏。 美丽是一种态度。 爱情不是占有,而是欣赏。 每个女孩都是公主。 美丽的女人不一定幸福,但幸福的女人一定美丽。 女人最好的化妆品是微笑。 …

    2024年8月4日
    105
  • 最漂亮的10种蝴蝶兰品种(公认蝴蝶兰选美排名)

    蝴蝶兰,因花朵姿态神似蝴蝶翩翩飞舞而得名,赏花期长,花朵数多,象征幸福、长久、丰盛之意。   蝴蝶兰的花朵艳丽娇俏,颜色丰富明快,常见颜色有粉红、紫红、橘红、红、白、紫蓝等颜色,并…

    2024年1月30日
    455
  • 《反转人生》结局是什么 《反转人生》根据什么小说改编的

    网剧《反转人生》是根据同名小说改编的,这部剧是一部身体互穿文,故事背景设定在校园,那么,《反转人生》结局是什么?下面小编就带来介绍。 《反转人生》根据什么小说改编的 缘何故同名小说…

    2024年8月5日
    91
  • 企业做推广有用吗(全网引流推广技巧)

    在这个互联网快速发展的时代,不促进互联网营销的公司很难生存和成长。老式的营销方法逐渐无法适应新的节奏。在这个以年轻人为主要消费者的时代,如何有效地推广互联网已成为许多传统企业主面临…

    2023年5月14日
    168
分享本页
返回顶部