数学

numpy的目标是提供使数值计算更容易的函数和类。有关详细的概述,请参阅部分 routines.linalg .numpy文档的。其中一些需要 linalg 之后 numpy .与

import numpy as np

函数和类可以通过

np.linalg.<function>

此用法指示需要此导入的函数。

组件式数学运算

NumPy arrays 支持中引入的典型数学运算 基础 它们是组件执行的。以下是几个例子:

>>> x = np.array([1, 2, 3, 4, 5])
>>> y = np.array([6, 5, 8, 9, 10])
>>> z = 2.0
>>> x + z
array([ 3.,  4.,  5.,  6.,  7.])
>>> x + y
array([ 7,  7, 11, 13, 15])
>>> y % z
array([ 0.,  1.,  0.,  1.,  0.])
>>> y / x
array([ 6.        ,  2.5       ,  2.66666667,  2.25      ,  2.        ])

如果需要一维的标量积 arrays 或二维矩阵乘法 arrays 功能 numpy.dot() 是可选择的功能:

>>> x = np.array([1, 2, 3, 4, 5])
>>> y = np.array([6, 5, 8, 9, 10])
>>> np.dot(x, y)
126
>>> x.dot(y)  # alternative syntax
126
>>> x = np.array([[1, 2, 3],
...               [4, 5, 6],
...               [7, 8, 9]])
>>> y = np.array([[10, 11, 12],
...               [13, 14, 15],
...               [16, 17, 18]])
>>> z = np.array([[1/19, 1/20, 1/21],
...               [1/22, 1/23, 1/24],
...               [1/25, 1/26, 1/27]])
>>> np.dot(x, np.dot(y, z))  # this is a bit convoluted
array([[ 12.35196172,  11.80535117,  11.30555556],
       [ 29.63712919,  28.32591973,  27.12698413],
       [ 46.92229665,  44.84648829,  42.9484127 ]])
>>> x.dot(y).dot(z)  # better
array([[ 12.35196172,  11.80535117,  11.30555556],
       [ 29.63712919,  28.32591973,  27.12698413],
       [ 46.92229665,  44.84648829,  42.9484127 ]])

本征值

函数 numpy.linalg.eig() 可用于计算 eigenvalues and eigenvectors 方阵的:

>>> x = np.array([[1, 2, 3],
...               [4, 5, 6],
...               [7, 8, 9]])
>>> np.linalg.eig(x)
(array([  1.61168440e+01,  -1.11684397e+00,  -1.30367773e-15]), array([[-0.23197069, -0.78583024,  0.40824829],
       [-0.52532209, -0.08675134, -0.81649658],
       [-0.8186735 ,  0.61232756,  0.40824829]]))

输出有点混乱,但ss您可以在文档中读取 numpy.linalg.eig() 该函数实际上返回两种情况:一个包含特征值的数组和一个将特征向量作为列的数组:

>>> eigenvalues, eigenvectors = np.linalg.eig(x)
>>> for i in range(eigenvalues.size):
...     print(eigenvalues[i], eigenvectors[:, i])
...
16.1168439698 [-0.23197069 -0.52532209 -0.8186735 ]
-1.11684396981 [-0.78583024 -0.08675134  0.61232756]
-1.30367772647e-15 [ 0.40824829 -0.81649658  0.40824829]

标准

计算向量的范数是一项相当常见的任务,因此很明显,numpy还为此提供了一个函数: numpy.linalg.norm() .

>>> x = np.array([3, 4])
>>> np.linalg.norm(x)
5.0

把经常使用的 \(\ell^2\) -norm此函数还提供其他规范。有关更多信息,请使用 numpy.linalg.norm() .

行列式

知道一个数组的行列式可以告诉你它是奇异的,还是在 \(3x3\) 数组,告诉你菱形的体积,它是由组成数组的向量所跨越的。

>>> x = np.array([[1, 2, 3],
...               [4, 5, 4],
...               [3, 2, 1]])
>>> np.linalg.det(x)
-7.9999999999999982

这应该是 \(-8\) 因此,一个有趣的方法是,看到numpy计算的行列式是数值计算的,而不是分析计算的。

练习