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

本文介绍了三个对人工智能和数据科学从业者重要的Python技能:1) Python3.10的新特性,包括如何用新语法解决模式匹配问题;2) 面向函数编程的概念和应用,如装饰器的使用;3) Python的广播加速机制,展示如何避免循环进行高效向量操作。这些技能能帮助提高编程效率和问题解决能力。

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

本文以实际问题驱动,主要介绍三个有助于提高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高级编程技能,对于提高编程能力,更快更好的处理问题都是非常有必要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值