R 向量和矩陣的線性代數運算

2021-06-26 14:25:34 字數 1570 閱讀 6120

向量乘以標量可以直接運算,如下所示: 

> y <- c( 1, 3, 6, 10 )

> 2 * y

[1]  2  6 12 20

如果想計算兩個向量的內積(也就是點積),可以使用crossprod()命令。

> crossprod( 1:3, c( 5, 12, 13 ) )

[,1]

[1,]   68

數學意義上的矩陣乘法,要使用運算子「%*%」。

> a <- matrix( c( 1, 3, 2, 4 ), nrow=2 )

> b <- matrix( c( 1, 0, -1, 1 ), nrow=2 )

> a %*% b

[,1] [,2]

[1,]    1    1

[2,]    3    1

函式solve()可以解線性方程組,還可以求矩陣的逆矩陣。

> a <- matrix( c( 1, 1, -1, 1 ), nrow=2, ncol=2 )

> b <- c( 2, 4 )

> solve( a, b )

#求解線性方程組

[1] 3 1

> solve( a )

#第二個引數省略表示計算矩陣的逆

[,1] [,2]

[1,]  0.5  0.5

[2,] -0.5  0.5

下面是一些其他線性代數運算子:

ю t():矩陣的轉置

ю qr():qr分解

ю chol():cholesky分解

ю det():矩陣的行列式值

ю eigen():矩陣的特徵值和特徵向量

ю diag():從方陣中提出對角矩陣(有利於從協方差矩陣中得到方差和構建對角矩陣)

ю sweep():數值分析批量運算子

需要注意的是diag()函式的兩用型:如果它的引數是乙個矩陣,它返回的是乙個向量,反之亦然;同樣的,如果它的引數是乙個標量,那麼這個函式返回指定大小的單位矩陣。

> m <- matrix( c( 1, 7, 2, 8 ), nrow=2 )

> dm <- diag( m )

> dm

[1] 1 8

> diag( dm )

[,1] [,2]

[1,]    1    0

[2,]    0    8

> diag( 3 )

[,1] [,2] [,3]

[1,]    1    0    0

[2,]    0    1    0

[3,]    0    0    1

函式sweep()可以做比較複雜的運算。下面的例子實現了第一行都加1,第二行都加4,第三行都加7:

> m <- matrix( c( 1, 4, 7, 2, 5, 8, 3, 6, 9 ), nrow=3 )

> sweep( m, 1, c( 1, 4, 7 ), "+" )

[,1] [,2] [,3]

[1,]    2    3    4

[2,]    8    9   10

[3,]   14   15   16

線性代數1 向量與矩陣

線性代數是數學的乙個分支,被廣泛應用於科學與工程中。實際上,線性代數不僅是人工智慧的基礎,更是現代數學和以現代數學為主要分析方法的眾多學科的基礎。線性代數最重要的兩個概念是向量和矩陣,線性代數的核心意義在於提供了一種看待世界的抽象視角 所有的事物都可以被抽象成一些特徵的組合,並在由預置規則定義的框架...

線性代數 2 (3 4) 矩陣及其運算

由於單位矩陣乘以任何矩陣均為原矩陣,且矩陣並沒有除法的概念,而對於自然數數的除法可以通過倒數的形式轉化為乘積的 形式,因此我們引入逆矩陣。對於n階矩陣a,如果有乙個n階矩陣b使得 ab ba e 則說a是可逆的,並且b稱為a的逆矩陣。注 逆矩陣唯一 若矩陣a可逆,則a的行列式不為0注 該定理可以對a...

線性代數 向量1

向量 n 個數 a 1,a 2,a n 組成的有序陣列 a 1,a 2,a n 被稱作向量,分量數稱為向量的維數,向量可以寫作行,稱為行向量,如 a 1,a 2,a n 向量寫作列,稱為列向量,如 left begina 1 a 2 a n end right 本質上沒有區別,但是形式上有區別。零向...