人工智能与数据科学从业者必会的三个Python技能点

2022-04-13  本文已影响0人  CV算法恩仇录

原创:王稳钺
资料来源:高民权

本文以实际问题驱动,主要介绍三个有助于提高Python编程能力的技能点。

1. Python3.10最新特性

首先第一个问题见下图,这个问题经常出现在计算机视觉,尤其是OCR和目标识别等相关的领域。

经过抽象,其实所需要处理的是两种固定的模式,即”嵌套+其他“和“非嵌套+其他”。解决方法比较简单,可以采用递归来解决。

假设现在有另外一个问题——flatten json,这在写API时会经常遇见。服务器端收到的json它可能是各种各样的,例如下图。如果想将‘Car’、‘Red’、‘off’等取出要如何做呢?

如果使用if-else去解决,会非常的复杂。那这个问题和前面的问题有没有什么相似之处呢?其实这两个问题本质上都是在进行一种模式上的匹配,它们的输入都满足某种模式,在此种模式中进行一些处理。Python3.10就出现了一种新的语法,来解决这类问题,具体使用见下图。

了解了这种语法之后,可以将第一个问题的代码修改的更加“优雅”,见下图。

利用flatten可以,可以尝试解决一个非常非常复杂的问题。在整个人工智能的发展历程上,有一个机器人叫做Eliza,它其实是历史上第一个被商用的人工智能程序,它所采用的是最经典的模式匹配。将输入的话通过模式匹配,输出后面的内容,如果了解过相关的内容就会知道这个问题其实是非常复杂的。

解决的具体代码如下。

下面的程序中利用了Python的一种高级用法,这不是3.10才有的,让计算机自己来生成一段程序并执行,这是C,C++等做不到的。

程序运行结果如下。

2. Python面向函数编程

什么叫做面向?面向是计算机程序语言理论里边一个非常非常基本的概念。如果某一个东西可以做变量,可以做参数,可以做返回值,就说是面向这个东西的。这就解释了为什么C++是面向对象的,而C语言不是。C语言中类是不能做返回值,不能做参数的,必须得返回指针。而在C++中,可以直接把类作为一个变量,作为一个参数。而所谓的面向函数其实就指的是函数可以作为一个返回值,函数可以作为一个参数,函数可以作为一个变量。下面举一个简单例子(装饰器)。

首先定义两个函数。如果想要得到函数的运行时间,可以采用time来计算,但如果有几十个函数都需要计算时间,将会非常麻烦。此时就可以利用下面的方法来实现。

函数作为一个参数值传入,同时返回值也是一个函数,这是典型的面相函数的使用。为了简化,可以使用@,如下图 。

再举另外一个例子,将服务器的开发抽象成一个简单的例子。

很多人写出来的程序可能是这样的,很麻烦。

其实可以这样做。

这样做的好处是如果外面有新的函数,不需要对新的函数有任何的修改,只需要在map中加入一行就可以了。这是面相函数编程才能实现的。

3. Python广播加速机制

对于传统的向量操作、矩阵操作,第一反应是用循环或者列表解析来做。但是其实在numpy、panas、torch中所有的矩阵和向量都是可以直接进行相乘、相加的,并且很多操作不需要利用循环。下面举一个简单的例子。

如果想要取出每一行第一个元素,可以采用循环完成。

更简单的方法可以不用循环。

如果要实现对于矩阵每一行的元素都加上这一行的第一个值,如果用循环完成比较麻烦的。如果利用广播,一句话就可以实现,并且在时间上显然会比用循环快很多。

掌握Python高级编程技能,对于提高编程能力,更快更好的处理问题都是非常有必要的。

上一篇 下一篇

猜你喜欢

热点阅读