数学¶
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. ])
点¶
如果您需要用于1D的标量积 arrays
或用于2D的矩阵乘法 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]]))
输出有点乱七八糟,但是您可以在 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\) -NORMAL此功能还提供其他规范。有关更多信息,请参阅 numpy.linalg.norm()
。
行列式¶
了解数组的行列式可能会告诉您它是否是单数的,或者,如果是 \(3x3\) 数组,告诉您组成数组的矢量所跨越的菱形体的体积。
>>> x = np.array([[1, 2, 3],
... [4, 5, 4],
... [3, 2, 1]])
>>> np.linalg.det(x)
-7.9999999999999982
这应该是 \(-8\) 所以看到NumPy计算的行列式是用数值计算的,而不是解析的,这是一种有趣的方式。