数学

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计算的行列式是用数值计算的,而不是解析的,这是一种有趣的方式。