Skip to Content
《高性能 Python》第二版
book

《高性能 Python》第二版

by Micha Gorelick, Ian Ozsvald
May 2025
Intermediate to advanced
468 pages
6h 20m
Chinese
O'Reilly Media, Inc.
Content preview from 《高性能 Python》第二版

第 6 章 矩阵和矢量计算 矩阵和矢量计算

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

无论你想在计算机上解决什么问题,都会在某些时候遇到矢量计算。 矢量计算是计算机如何工作以及如何在芯片级加快程序运行速度不可或缺的一部分--计算机唯一会做的就是对数字进行运算,而知道如何同时进行多项运算将加快你的程序运行速度。

在本章中,我们试图通过关注一个相对简单的数学问题--求解扩散方程--来解开这个问题的一些复杂性,并了解 CPU 层面发生了什么。 通过了解不同的 Python 代码如何影响 CPU 以及如何有效地探测这些事情,我们也可以学习如何理解其他问题。

我们将首先介绍这个问题,并使用纯 Python 想出一个快速解决方案。 在确定了一些内存问题并尝试使用纯 Python 解决它们之后,我们将介绍numpy ,并确定它如何以及为什么能加快我们的代码。 然后,我们将开始进行一些算法修改,并对代码进行专门化,以解决手头的问题。 通过去除我们正在使用的库中的一些通用性,我们将再次获得更快的速度。 接下来,我们将介绍一些额外的模块,这些模块将有助于在实际应用中简化此类过程,同时我们还将探讨一个关于先优化后剖析的警示故事。

最后,我们来看看 Pandas 库,它建立在numpy 的基础上,可以获取同质数据列并将其存储在异质类型表中。Pandas 已经不再使用纯粹的numpy 类型,现在可以将自己的数据缺失感知类型与numpy 数据类型混合使用。虽然 Pandas 深受科学开发人员和数据科学家的欢迎,但在如何使其快速运行方面却存在很多错误信息;我们将解决其中的一些问题,并为您提供编写高性能和可支持的分析代码的技巧。

问题介绍

为了在本章中探讨矩阵和矢量计算,我们将反复以流体中的扩散为例。 扩散是移动流体并使其均匀混合的机制之一。

备注

本节旨在加深对本章所要解方程的理解。 要学习本章的其他内容,并不是一定要理解本节内容。 如果你想跳过本节,请确保至少看了例6-1和例6-2中的算法,以理解我们将要优化的代码。

另一方面,如果您在阅读本节内容后还想了解更多解释,请阅读 William Press 等人所著的《Numerical Recipes, 3rd Edition》(第 3 版)(剑桥大学出版社)第 17 章。

在本节中,我们将探讨扩散方程背后的数学原理。 这看起来可能很复杂,但不用担心! 我们会很快将其简化,使其更易于理解。 此外,需要注意的是,虽然对我们正在求解的最终方程有一个基本的了解会对阅读本章有所帮助,但这并不是完全必要的;后续章节将主要关注代码的各种表述,而不是方程。 不过,对方程的了解会帮助你获得优化代码的直觉。 一般来说也是如此--理解代码背后的动机和算法的复杂性会让你对可能的优化方法有更深入的了解。

扩散的一个简单例子是水中的染料:如果在室温下将几滴染料滴入水中,染料会慢慢向外移动,直到与水完全混合。 由于我们没有搅拌水,水温也不足以产生对流,因此扩散将是两种液体混合的主要过程。 在数值求解这些方程时,我们可以选择想要的初始条件,并将初始条件在时间上向前推移,以查看它在以后的时间里会是什么样子(见图 6-2 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

《学习 Python》第 5 版

《学习 Python》第 5 版

Mark Lutz
ppk on JavaScript

ppk on JavaScript

Peter-Paul Koch

Publisher Resources

ISBN: 9798341657946