数学¶
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计算的行列式是数值计算的,而不是分析计算的。