欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【线性代数公开课MIT Linear Algebra】 实际应用——python中的线性代数(1)

程序员文章站 2022-07-12 13:52:48
...

目前已经看完了公开课的三分之一,线性代数中的常见概念也已经差不多全部介绍了一遍,那么在实际应用中会借助于计算机来实现,这里将介绍如何在python中使用我们学到的知识。

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。

以上引自百度百科
numpy官网:http://www.numpy.org/

1.如何表示矩阵

矩阵A
147258369

import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
B = np.matrix('1 2 3;4 5 6; 7 8 9')

2.矩阵乘法

对于ndarray或者matrix来说,其加法或者减法都是直接对每一个元素都进行计算,但是二者的乘法是不同的。
ndarray的乘法是对每一个元素相乘,而matrix的乘法是矩阵乘法

>>> A = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> A
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> A*A
array([[ 1,  4,  9],
       [16, 25, 36],
       [49, 64, 81]])
>>> B = np.matrix('1 2 3;4 5 6; 7 8 9')
>>> B
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
>>> B*B
matrix([[ 30,  36,  42],
        [ 66,  81,  96],
        [102, 126, 150]])

但是实际应用中我们使用ndarray更多一些,那么使用ndarray时要实现矩阵乘法就需要使用np.dot()函数:

>>> np.dot(A, A)
array([[ 30,  36,  42],
       [ 66,  81,  96],
       [102, 126, 150]])

3.矩阵的秩

np.rank()函数返回的不是矩阵的秩,而是dimension 维数!!!
np.rank()函数返回的不是矩阵的秩,而是dimension 维数!!!
np.rank()函数返回的不是矩阵的秩,而是dimension 维数!!!
要获得矩阵的rank要使用np.linalg.matrix_rank()函数:

>>> np.rank(np.array([[[1], [2], [3]]]))
3
>>> np.rank(np.array([[[[1], [2], [3]]]]))
4
>>> A = np.array([[1,2,3],[4,5,6],[10,8,9]])
>>> A
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [10,  8,  9]])
>>> np.rank(A)
2
>>> np.linalg.matrix_rank(A)
3

4.矩阵的转置

转置transpose:

>>> B
matrix([[ 1,  2,  3],
        [ 4,  5,  6],
        [10,  8,  9]])
>>> B.T
matrix([[ 1,  4, 10],
        [ 2,  5,  8],
        [ 3,  6,  9]])
>>> B.transpose()
matrix([[ 1,  4, 10],
        [ 2,  5,  8],
        [ 3,  6,  9]])

5.矩阵的逆

逆inverse:

>>> np.linalg.inv(A)
array([[ 2., -1.],
       [-1.,  1.]])