首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Python是AI最好的语言,以及如何使它更好(27PPT)

这个ppt来自 Honnibal 在巴伊兰大学计算机科学系研讨会的演讲,主题是“为什么Python是AI最好的语言(以及如何使它更好)”。...来源:为什么Python在机器学习中如此受欢迎?(Quora) ? 执行Python的一般方法 实现它。 使它更快。 我们可以在这里使用PyPy吗? 更多核心 糟糕,为什么不起作用? ?...渐进式改进并不总能得到最佳解决方案 你可以一点一点地使你的Python代码更快,但假如从解决方案空间的错误部分开始,不能得到最好的解决方案。 ? 更好的Python执行方法 规划数据结构。...写出简单,易理解,以及近似最优的解决方案。 修复编译器错误。 思考为什么没有更多的文档。 思考人生。 终于,获得结果。 ? ? 使用Cython。...进一步了解Cython Cython-CUDA可以很好用 库可以拥有很好的Cython API 可以更容易地编译独立的库或应用 ? “但是为什么不使用JIT编译?”

1.1K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python标准库:超棒的 时间序列 处理模块,4大常用时间类,用了的都说好!

    人生苦短,快学Python 请关注系列文章——有用有趣的 Python库!...为了灵活的处理时间,Python中提供了一个非常好用的datetime模块,这个库里面主要有4个常用类,分别为大家先简单介绍一下: ① date类:主要用于处理年、月、日; ② time类:主要用于处理时...③ dt.strftime(format):传入任意格式符,可以输出任意格式的日期表示形式; ? 4. timedelta类 ① 分别创建date类、datetime这两个类的对象; ?...= dt + timedelta(hours=1) print(dt4) # 上一秒 dt5 = dt + timedelta(seconds=-1) print(dt5) # 下一秒 dt6 = dt...+ timedelta(seconds=1) print(dt6) 人生苦短,快学Python

    1.7K10

    为什么你总是学不会Python,入门Python的4大陷阱ython,因为你全掉坑了

    市面上大部分的 Python 入门书籍的目录都非常长(毕竟缺少某个重要的知识点会被批),但是作为入门来说,真的需要所有的知识点都学习一遍吗?...因为在 Python 中更倾向于构造新的序列,而非对序列原地操作。 当你后期学会了推导式之后,你就会发现用得最多的语法就是 if 和 for 你可能疑惑,为什么序列的处理很重要?...这是非常反人类直觉的做法。 而 Python 初学者却经常使用这种反人类直觉编程——写到哪,想到哪 ---- 现在换成 Python 问题。...但初学者一般不怎么会用 ---- 一定要学习自定义函数 为什么编程语言基本都有自定义函数的特性?因为这符合我们解决问题的思维逻辑。...解决的思路与之前反直觉一样。 ---- 但是怎么感觉现在代码量比之前更多了? 的确如此,但是,如果现在信息保存在 excel 中,你就能马上知道在哪个函数修改,并且修改的负担变少了很多 为什么?

    49020

    使用 cProfile 和火焰图调优 Python 程序性能

    当时开了 4 台双核的机器:(1s / 400ms) * 2 * 4 = 20 啊。看来需要优化下这一步的代码了,那么第一步就是找到可以优化的地方。...我们明明只运行了 100 次,为什么这个函数调用了 300 次呢?显然代码中有重复建树的地方,也就是有隐藏的 bug。...盯了一会儿,眼睛最终看到了一个小角落: 一个正则匹配居然占用了 8% 的运行时间,太不像话了。老早之前就听说 Python 的标准库正则性能不行,现在才发现原来是真的挺差劲的。...总有人吐槽 Python 的性能低下,但是 Python 本来就不是做计算任务的呀,Python 是一门胶水语言,是用来写业务逻辑的,而不是用来写CPU密集的算法的。...这点上 Python 本身没有做到,反倒是 Go 实践地非常好。 扯远了,程序的瓶颈其实不外乎CPU、内存和 IO 三个方面,而 cProfile 和火焰图是判断 CPU 瓶颈的一把利器。

    1.7K20

    为什么Python这么慢?

    我也将在本文中提及其他的解释器。 我想要回答这样一个问题:当运行同一个程序时,为什么Python会 比其他语言慢2到10倍?为什么我们无法将它变得更快?...这就是为什么在CPython中创造“临时”变量不会使应用占用大量的存储空间——尤其是当应用中使用了for循环这一类可能大量创建“临时”变量的结构时。...因为Python解释器启动很慢,一些WSGI便集成了能够使保持Python进程的“守护进程” 。 那么其他Python解释器的速度又如何呢? PyPy拥有GIL,通常比CPython快至少三倍。...这个步骤不仅仅应用于脚本文件,也应用于所有导入的代码,包括第三方模块。 所以大多时候(除非你写的代码只运行一次),Python是在解释字节码并且本地执行。...Python自动完成了这个过程,我们看不见,也没必要看见。 不必声明类型不是使Python变慢的原因。Python语言的设计使我们几乎可以创建任何动态变量。

    1.1K40

    NVIDIA希望有更多支持CUDA的编程语言

    Larkin给出了某些编程语言如何利用其 GPU 的一些示例,并提到了 Judia 和 Rust。 为什么要切换到 GPU? 早期的编程模型围绕 CPU 展开。...矩阵计算风格建立在 GEMM 算法之上,该算法利用了 Tensor Core,并且是 NVIDIA AI 计算模型的核心。...“这个想法是获取你的 cuBLAS 核心,只使用一个 GEMM 核心在你的内核中激活它,就像你使用 CPU 中的 cuBLAS 所做的那样,”Jones 说道。...NVIDIA 希望使 Python “成为完整的 Nvidia 体验,并使 Python 开发人员和整个 CUDA 生态系统对 Python 程序员可用且可访问,”Jones 说道。...NVIDIA 引入了新的数据类型 FP4 和 FP6,它们精度较低,但可以每瓦特榨取更多性能。 该公司在 GTC 上推出了一款代号为 Blackwell 的新 GPU。

    15110

    Python中的GIL锁

    GIL并不是Python语言的特性,它是在实现Python解释器时引用的一个概念。GIL只在CPython解释器上存在。...3.因为线程是存在于进程中的,线程是CPU调度和分派的基本单位,Python中的多线程由于GIL锁的存在无法利用多核 CPU。...4.GIL在程序中有IO操作时才切换到其他线程,所以Python中的多线程不适合计算密集型的程序,只适合IO密集型的程序。...既然GIL的存在使程序无法充分利用CPU进行运算,那么在IO密集型程序中为什么适合使用呢? 通常,程序分为两种,一种是计算密集型程序,另一种叫作IO密集型程序。...为了提高CPU的使用率,Python解释在程序执行IO等待时,会释放GIL锁,让其它线程执行,提高Python程序的执行效率。

    44930

    Python 进阶指南(编程轻松进阶):八、常见的 Python 陷阱

    只有当计算机耗尽内存并使 Python 程序崩溃时,或者直到您通过按下Ctrl+C来中断它,循环才会停止。...但是赋值语句从不复制对象,只复制对象的引用。赋值语句cheese = spam使cheese 引用与spam在计算机内存中相同的列表对象。它不会复制列表对象。...这就是为什么 Python 赋值只复制引用,从不复制对象。 防止这种情况的一种方法是用copy.copy()函数复制列表对象(不仅仅是引用)。...Python 让你不必考虑许多底层细节。这使得程序员可以快速编写软件,正如前面提到的,程序员的时间比 CPU 的时间更宝贵。...这不是 Python 陷阱;IEEE 754 标准是一种直接在 CPU 浮点电路中实现的硬件标准。

    1.6K50

    Python 多线程是鸡肋?

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋?...,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。...因此,这也就是为什么两个线程一起执行反而更加慢的原因,因为同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换...为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋?...,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。

    77340

    Python 多线程编程

    Python 提供了 multiprocessing 模块对多进程进行支持,它使用了与 threading 模块相似的 API 产生进程,除此之外,还增加了新的 API,用于支持跨多个输入值并行化函数的执行及跨进程分配输入数据...2 GIL 要说 Python 的多线程,必然绕不开 GIL,可谓成也 GIL 败也 GIL,到底 GIL 是啥?怎么来的?为什么说成也 GIL 败也 GIL 呢?...2.2 GIL 起源与发展 我们已经知道了 GIL 是 CPython 解释器中引入的机制,那为什么 CPython 解释器中要引入 GIL 呢?...现在这种情况,我们可能会想要实现真正意义上的多线程,可不可以去掉 GIL 呢?答案是可以的,但是有一个问题:依赖这个特性的代码库太多了,现在已经是尾大不掉了,使去除 GIL 的工作变得举步维艰。...示例如下: # 等待线程 p1、p2 都执行完 p1.join() p2.join() 4 多进程实现 Python 的多进程通过 multiprocessing 模块的 Process 类实现,它的使用基本与

    70550

    比Mojo慢68000倍,Python性能差的锅该给GIL吗?

    对于 Python 程序来说,既然 GIL 使单个虚拟机无法并行执行 Python 程序,那么在需要充分利用多核 CPU 的场景中,最常见的做法就是启动多个 Python 进程,这也是 Python 服务器的常见实现方式...当我们考虑一个技术选择是否合理的时候,不能只以当下的目光去审视过去,而需要回到当时的场景中去考虑问题。...而世界上第一个多核 CPU 是 2001 年的 IBM Power4,也就是说,在 Python 最初被设计时,并没有多核 CPU 这种东西,后来即便有了,也并不普及。...因此 Python 采用了一个取巧的方法,就是加入 GIL。...这对于当时的用户群来说确实完全够用了,因为当时大多数用户使用的都是单核 CPU。

    63340

    为什么有人说 Python 多线程是鸡肋?

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋?...有同学可能知道答案,因为 Python 中臭名昭著的 GIL,GIL 是什么?为什么会有 GIL?多线程真的是鸡肋吗? GIL 可以去掉吗?带着这些问题,我们一起往下看,同时需要你有一点点耐心。...,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。...因此,这也就是为什么两个线程一起执行反而更加慢的原因,因为同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换...计算密集型(CPU-bound)线程执行 100 次解释器的计步(ticks)时(计步可粗略看作 Python 虚拟机的指令),也会释放 GIL。

    99460

    高级Python技术:如何在Python应用程序中实现缓存

    随后,缓存可以提高应用程序的性能,因为从临时位置访问数据比每次从源(如数据库、web服务等)获取数据更快。 本文旨在解释Python中的缓存是如何工作的。 为什么我们需要实现缓存?...要理解缓存是什么以及为什么需要缓存,请考虑下面的场景。 我们正在用Python构建一个应用程序,它将向最终用户显示产品列表。这个应用程序每天会被超过100个用户多次访问。...此外,知道什么时候使缓存失效,什么时候用新数据重新加载缓存也很重要。 2. 第二个规则: 第二条规则是确保从引入的缓存机制获取数据比执行目标函数更快。...因此,我们可以只缓存每个订单的名称,而不是缓存整个订单对象。通常,架构师建议创建一个具有__slots__属性的精益数据传输对象(DTO),以减少内存占用。也使用了命名元组或Python数据类。...最近使用的算法 我们可以使用Python的内置特性LRU。 LRU代表最近最少使用的算法。LRU可以缓存函数的返回值,这些返回值依赖于传递给函数的参数。 LRU在递归CPU绑定操作中特别有用。

    1.7K20

    Python Web学习笔记之GIL机制下的鸡肋多线程

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程、多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋?...有同学可能知道答案,因为 Python 中臭名昭著的 GIL。 那么 GIL 是什么?为什么会有 GIL?多线程真的是鸡肋吗? GIL 可以去掉吗?...,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。...因此,这也就是为什么两个线程一起执行反而更加慢的原因,因为同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程「并行」地同时执行代码,只能是交替执行,因为多线程涉及到上线文切换...计算密集型(CPU-bound)线程执行 100 次解释器的计步(ticks)时(计步可粗略看作 Python 虚拟机的指令),也会释放 GIL。

    60260

    为什么Python这么慢?

    用.NET实现的叫IronPython,Java的叫Jython,用Python实现的叫PyPy 我想回答这个问题:当Python比另一种语言慢2 - 10倍完成一个可比较的应用程序时,为什么它慢,我们不能使它更快...它是GIL(全局解释器锁) 现代计算机的CPU是多核的,有时也有多个处理器。...通过这种方式,如果一个进程是cpu密集型的,那么可以跨内核共享负载,从而有效地使大多数应用程序更快地完成任务。 如果您以前没有做过多线程编程,那么您需要快速熟悉锁的概念。...这不仅适用于您的脚本,还适用于您导入的所有代码,包括第三方模块。 所以大多数时候(除非您编写的代码只运行一次?),Python都是解释字节码并在本地执行它。...不需要声明类型并不是使Python变慢的原因,Python语言的设计使您能够使几乎任何东西都是动态的。您可以在运行时替换对象上的方法,您可以在运行时对低级系统调用的值进行monkey-patch。

    1.5K20

    深度神经进化加速:只需 4 个小时就在个人电脑上训练出强化学习模型

    它允许 GPU 只运行需要运行的那几个网络,而不需要在每次迭代中都运行整批固定的网络集。 到目前为止所描述的改进使得 GPU 比 CPU 更具成本效益。...这些将 Atari 模拟器的接口从 Python 改为定制的 TensorFlow 命令(reset,step,observation),利用了 TensorFlow 提供的多线程快速处理能力,因而没有...这种方法是最右边的「流水线 CPU + GPU」选项,如下图右 1 所示。通过它以及上文提到的其他改进,使得我们训练 4 百万参数的神经网络所需时间降到在一台计算机上只需 4 小时。 ?...直白的运行方式虽然使用了 GPU(左)但性能低,原因有两个:1)GPU 的批大小为 1,没有利用它的并行计算能力,2)存在 GPU 等待 CPU 的空闲时间,反之亦然。...更快的代码会带来研究进展。例如,新代码使 Uber AI Lab 能够只花很少的成本就可以为遗传算法展开一个广泛的超参数搜索,与他们最初报告的性能相比,将改进大多数 Atari 游戏的性能。

    72630

    干货 | 深度神经进化加速:只需 4 个小时就在个人电脑上训练出强化学习模型

    它允许 GPU 只运行需要运行的那几个网络,而不需要在每次迭代中都运行整批固定的网络集。 到目前为止所描述的改进使得 GPU 比 CPU 更具成本效益。...这些将 Atari 模拟器的接口从 Python 改为定制的 TensorFlow 命令(reset,step,observation),利用了 TensorFlow 提供的多线程快速处理能力,因而没有...这种方法是最右边的「流水线 CPU + GPU」选项,如下图右 1 所示。通过它以及上文提到的其他改进,使得我们训练 4 百万参数的神经网络所需时间降到在一台计算机上只需 4 小时。 ?...直白的运行方式虽然使用了 GPU(左)但性能低,原因有两个:1)GPU 的批大小为 1,没有利用它的并行计算能力,2)存在 GPU 等待 CPU 的空闲时间,反之亦然。...更快的代码会带来研究进展。例如,新代码使 Uber AI Lab 能够只花很少的成本就可以为遗传算法展开一个广泛的超参数搜索,与他们最初报告的性能相比,将改进大多数 Atari 游戏的性能。

    84220

    回顾2016深度学习十大框架

    Andrej Karpathy: 我希望TensorFlow能够使我们的代码走向标准化,但TensorFlow的水平很低,所以我们在其上层分离出了:Slim、PrettyTensor、Keras、TFLearn...TensorFlow支持Python和C++,也允许在CPU和GPU(多数情况下是同步的)上进行布式计算,甚至也支持使用gRPC进行水平扩展。...在我们实验室的实验中,CaffeNet架构的训练时间比在Keras(使用了Theano后端)中少了5倍。Caffe的缺点是不够灵活。...尽管深度学习的领域还支持很多其他语言,但Python是应用范围最广而且最简单的一门语言。说到底,为什么要选择Python这门速度非常慢的语言呢?因为大多数的库使用符号语言、而不是命令式语言的方式。...目前,大家对深度学习的兴趣越来越浓,但却又不愿意等待算法训练所需要的大量计算时间(而且我说的是GPU,最好不要考虑只使用CPU)。这也是支持多GPU、多机器的水平扩展和硬件定制的引进开始得势的原因。

    748110
    领券