第4章 线性代数——数组

线性代数是计算数学最重要的组成部分之一。线性代数的研究对象是向量和矩阵。NumPy包含有所有用来处理这些对象的必备工具。

首要任务是构建矩阵和向量,或者通过切片来更改它们。另一个主要任务是dot运算,它包括了大多数线性代数运算(标量积、矩阵—向量乘积和矩阵—矩阵乘积)。总之,处理线性代数问题的方法有多种。

简而言之,这部分介绍了如何在nutshell中使用数组。注意,数组的行为一开始可能会让人觉得匪夷所思,因此我们建议读者在阅读完简介部分后不要停下来。

创建向量就像使用函数array将列表转换为数组一样简单:

v = array([1.,2.,3.])

对象v现在是一个向量,其行为很像线性代数中的向量。前面强调过Python列表对象之间的差异(见第3.2节)。以下是一些在向量上执行的基本线性代数运算的例子:

# 两个由3个元素组成的向量
v1 = array([1., 2., 3.])
v2 = array([2, 0, 1.])

# 标量乘法/除法
2*v1 # array([2., 4., 6.])
v1/2 # array([0.5, 1., 1.5])

# 线性组合
3*v1 # array([ 3., 6., 9.])
3*v1 + 2*v2 # array([ 7., 6., 11.])

# 范数
from scipy.linalg import norm
norm(v1) # 3.7416573867739413
# 标量积
dot(v1, v2) # 5.
v1 @ v2 # 5 ; 另一种表述

注意,所有的基本算术运算都是在元素间进行的:

# 元素间运算: v1 * v2 # array([2., ...

Get Python3.0科学计算指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.