机器学习(三) 线性代数-矩阵

机器学习(三) 线性代数-矩阵

矩阵

矩阵是一个二维的数据集合。我们将矩阵表示为列表的列表,每个内部列表的大小都一样,表示矩阵的一行。如果A是一个矩阵,那么A[i][j]就表示第i行第j列的元素。

按照数学表达的惯例,我们通常用大写字母表示矩阵。例:

A = [[1,2,3], # A有2行3列
     [4,5,6]]
B = [[1,2],  # B有3行2列
     [3,4],
     [5,6]]

数学中,矩阵的第一行通常称为"第一行",第一列通常称为"第一列"。我们需要将矩阵的形式和python的列表统一:python中的列表从0开始索引,所以,我们将矩阵第一行通常称为"第0行",第一列通常称为"第0列"。

基于列表的列表这种表达形式,矩阵A具有len(A)和len(A[0])列,这种称为形状。

def shape(A):
    num_rows = len(A)
    num_cols = len(A[0]) if A else 0   #第一行中元素的个数
    return num_rows,num_cols
A = [[1,2], 
     [3,4],
     [5,6]]
shape(A)

如果一个矩阵有n行k列,则可以记为n x k矩阵。我们可以把这个n x k矩阵的每一行都当作一个长度为k的向量,把每一列都当作一个长度为n的向量。

def get_row(A,i):
    return A[i]   # A[i]是第i行
def get_column(A,j):
    return [A_i[j] for A_i in A]  #每个A_[i]行的第j个元素
get_row(A,2)
[5,6]
get_column(A,1)
[2,4,6]

我们也可以根据形状和用来生成元素的函数来创建矩阵,这里举个创建单位矩阵(对角线元素是1,其他元素是0)的例子:

def entry_fn(i,j):
    return 1 if i==j else 0
  
def make_matrix(num_rows,num_cols,entry_fn):
    return [[entry_fn(i,j) for j in range(num_cols)]for i in range(num_rows)]
  
make_matrix(5,5,entry_fn)

结果如下:

[[1, 0, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 0, 1, 0],
 [0, 0, 0, 0, 1]]

矩阵很重要

1.通过把每个向量看出是矩阵的一行,矩阵表示一个包含多维向量的数据集。

例如:有10万人的身高、体重和年龄,就可以创建一个100000 x 3的矩阵,不会在markdown中输入数学符号,点这里:

[ 174 62 25 169 65 30 ⋮ ⋮ ⋮ 176 61 29 ] ​ \begin{bmatrix}174&62&25\\169&65&30\\\vdots&\vdots&\vdots\\176&61&29\end{bmatrix}​ 174169176626561253029

2.可以用n x k矩阵表示一个线性函数,这个函数将一个k维的向量映射到一个n维的向量上。

{ Y 1 = β 1 X 11 + β 2 X 21 + β 3 X 31 + ⋯ + β k X k 1 Y 2 = β 1 X 12 + β 2 X 22 + β 3 X 32 + ⋯ + β k X k 2 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ Y n = β 1 X 1 n + β 2 X 2 n + β 3 X 3 n + ⋯ + β k X k n ​ \begin{cases}Y_1=\beta_1X_{11}+\beta_2X_{21}+\beta_3X_{31}+\cdots+\beta_kX_{k1}\\Y_2=\beta_1X_{12}+\beta_2X_{22}+\beta_3X_{32}+\cdots+\beta_kX_{k2}\\\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\\Y_n=\beta_1X_{1n}+\beta_2X_{2n}+\beta_3X_{3n}+\cdots+\beta_kX_{kn}\end{cases}​

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值