English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
NumPy 线性代数的实例
函数 | 描述 |
dot | 两个数组的点积,即元素对应相乘。 |
vdot | 两个向量的点积 |
inner | 两个数组的内积 |
matmul | 两个数组的矩阵积 |
determinant | 数组的行列式 |
solve | 求解线性矩阵方程 |
inv | 计算矩阵的乘法逆矩阵 |
numpy.dot() 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩阵乘积;对于多维数组,它的通用计算公式如下,即结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和: dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])。
numpy.dot(a, b, out=None)
参数说明:
a : ndarray 数组 b : ndarray 数组 out : ndarray, 可选,用来保存dot()的计算结果
import numpy.matlib Exemplo import numpy as np1],[0,2b = np.array([[3],[0,4],[ print('Matriz b: ')11],[0,12b = np.array([[13],[0,14],[ print(np.dot(a,b))
A solução é:
[[37 40] [85 92]]
计算式为:
[[1*11+2*13],[0, 1*12+2*14b = np.array([[3*11+4*13],[0, 3*12+4*14]]
numpy.vdot() 函数是两个向量的点积。 如果第一个参数是复数,那么它的共轭复数会用于计算。 如果参数是多维数组,它会被展开。
import numpy.matlib Exemplo import numpy as np1],[0,2b = np.array([[3],[0,4],[ print('Matriz b: ')11],[0,12b = np.array([[13],[0,14],[ # vdot 将数组展开计算内积 print (np.vdot(a,b))
A solução é:
130
计算式为:
1*11 + 2*12 + 3*13 + 4*14 = 130
numpy.inner() 函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积。
import numpy.matlib print (np.inner(np.array([1],[0,2],[0,3]),np.array([0,1,0]]) # equivalente a 1*0+2*1+3*0
A solução é:
2
Exemplo import numpy as np1],[0,2], [3],[0,4],[ , print('Array a: ') print('Matriz b: ')11],[0, 12], [13],[0, 14],[ print('array b:') print(]] print('produto escalar:') print(np.inner(a, b))
A solução é:
Resultados de Saída: [[1 2] [3 4]] array b: [[11 12] [13 14]] produto escalar: [[35 41] [81 95]] Resultados de Saída: [[1 2] [3 4]] array b: [[11 12] [13 14]] produto escalar: [[35 41] [81 95]]
a expressão de cálculo do produto escalar é:
1*11+2*12],[0, 1*13+2*14 3*11+4*12],[0, 3*13+4*14
A função numpy.matmul retorna o produto matricial de dois arrays. Embora ela retorne o produto normal de arrays bidimensionais, se a dimensão de qualquer parâmetro for maior que2e é considerado como uma pilha de matrizes existente nas últimas duas posições, realizando a correspondente broadcast.
Por outro lado, se algum parâmetro for um array unidimensional, ele é adicionado 1 para elevá-lo a uma matriz e ser removido após a multiplicação.
Para arrays bidimensionais, ele é a multiplicação matricial:
import numpy.matlib Exemplo a = [[1,0],[0,1]] b = [[4],[0,1b = np.array([[2],[0,2]] print(np.matmul(a, b))
A solução é:
[[4 1] [2 2]]
operações bidimensionais e unidimensionais:
import numpy.matlib Exemplo a = [[1,0],[0,1]] b = [1],[0,2] print(np.matmul(a, b)) print(np.matmul(b, a))
A solução é:
[1 2] [1 2]
arrays de dimensão maior que dois:
import numpy.matlib Exemplo a = np.arange(8).reshape(2],[0,2],[0,2) b = np.arange(4).reshape(2],[0,2) print(np.matmul(a, b))
A solução é:
[[[ 2 3] [ 6 11]] [[10 19] [14 27]]
A função numpy.linalg.det() calcula o determinante da matriz fornecida.
O determinante é um valor muito útil na álgebra linear. Ele é calculado a partir dos elementos da diagonal da matriz. Para 2×2 matriz, que é a diferença do produto dos elementos superior esquerdo e inferior direito com o produto dos outros dois.
Ou seja, para a matriz [[a, b], [c, d]], o determinante é calculado como ad-bc. A matriz quadrada maior é considerada 2×2 composição de matrizes.
Exemplo import numpy as np1],[0,2], [3],[0,4],[ print(np.linalg.det(a))
A solução é:
-2.0
Exemplo print('Matriz b: ')6],[0,1],[0,1], [4],[0, -2],[0, 5], [2],[0,8],[0,7],[ print(]] print(np.linalg.det(b)) print(6*(-2*7 - 5*8) - 1*(4*7 - 5*2) + 1*(4*8 - -2*2))
A solução é:
[[ 6 1 1] [ 4 -2 5] [ 2 8 7]] -306.0 -306
A função numpy.linalg.solve() fornece a solução da equação linear em forma matricial.
Considere a seguinte equação linear:
x + y + z = 6 2y + 5z = -4 2x + 5y - z = 27
Pode ser representada matematicamente como:
Se a matriz se tornar A, X e B, a equação se torna:
AX = B ou X = A^(-1)B
A função numpy.linalg.inv() calcula a inversa multiplicativa da matriz.
Matriz inversa (inverse matrix)Definimos que A é uma matriz de ordem n em um campo de números, se existir outra matriz de ordem n, B, no mesmo campo de números, tal que: AB = BA = E, então chamamos B de inversa de A e A é chamada de matriz invertível. Nota: E é a matriz unitária.
Exemplo ]]1],[0,2b = np.array([[3],[0,4],[ x = np.array([[ x = np.linalg.solve(a, b) y = np.linalg.inv(x) print(y)
A solução é:
[[1 2] [3 4]] [[-2. 1print(np.dot(x, y)) [ 1.5 -0.5]] [[1e+. ]+00 0.0000000e [8.881784200]-16 1e+.0000000e
00]]
Exemplo import numpy as np1],[0,1],[0,1a = np.array([[2],[0,5b = np.array([[2],[0,5],[0,-1],[ , print('Array a: ') print(a) ainv = np.linalg.inv(a) print('Inversão de a: ') print(ainv) print('Matriz b: ')6b = np.array([[-4b = np.array([[27],[ print(]] print(b)-1print('Cálculo: A^( )B:') x = np.linalg.solve(a, b) print(x) 5# Isso é a direção linear x = 3, y = -2 , z =
A solução é:
Resultados de Saída: [[ 1 1 1] Array a: 2 5] [ 2 5 -1]] Inversão de a: [ 0 [[ 1.28571429 -0.28571429 -0.14285714] [-0.47619048 0.14285714 0.23809524] [ 0.19047619 0.14285714 -0.0952381 ]] Matriz b: [[ 6] [-4] [27]] Cálculo: A^(-1)B: [[ 5.] [ 3.] [-2.]]
x = np.dot(ainv, b)