日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

R语言基础入门(10)之矩阵和数组

發(fā)布時(shí)間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言基础入门(10)之矩阵和数组 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1.矩陣

創(chuàng)建矩陣

查看矩陣的行與列數(shù)

轉(zhuǎn)置

2.矩陣子集

3.矩陣行列命名

4.命名后取子集

5.邏輯下標(biāo)取子集

6.正整數(shù)向量的矩陣取子集

7.返回對(duì)角線向量

8.創(chuàng)建單位矩陣

9.cbind() 和 rbind() 函數(shù)

10.?矩陣運(yùn)算

10.1??四則運(yùn)算

10.2??矩陣乘法

10.3?向量與矩陣相乘

10.4 內(nèi)積

10.5 外積

10.6?逆矩陣與線性方程組求解

10.7?apply() 函數(shù)

10.8?多維數(shù)組


1.矩陣

創(chuàng)建矩陣

????????矩陣用 matrix 函數(shù)定義,實(shí)際存儲(chǔ)成一個(gè)向量,根據(jù)保存的行數(shù)和列數(shù)對(duì)應(yīng)到矩陣的元素,存儲(chǔ)次序?yàn)榘戳写鎯?chǔ)。定義如 A <- matrix(11:16, nrow=3, ncol=2); print(A)

返回:

再如:

B <- matrix(c(1,-1, 1,1), nrow=2, ncol=2, byrow=TRUE); print(B)

返回:

matrix() 函數(shù)把矩陣元素以一個(gè)向量的形式輸入,用 nrow ncol 規(guī)定行數(shù)和列數(shù),向量元素填入矩陣的缺省次序是按列填入,用 byrow=TRUE 選項(xiàng)可以轉(zhuǎn)換成按行填入。

查看矩陣的行與列數(shù)

nrow() ncol() 函數(shù)可以訪問(wèn)矩陣的行數(shù)和列數(shù),如 nrow(A)

返回:

ncol(A)

返回:

矩陣有一個(gè) dim 屬性,內(nèi)容是兩個(gè)元素的向量,兩個(gè)元素分別為矩陣的行數(shù)和列數(shù)。dim 屬性可以用 dim() 函數(shù)訪問(wèn)。如

attributes(A)

返回:

?還有一個(gè):

dim(A)

返回:

轉(zhuǎn)置

t(A)

?返回:

2.矩陣子集

A[1,] 取出 A 的第一行,變成一個(gè)普通向量。用 A[,1] 取出 A 的第一列,變成一個(gè)普通向量。用 A[c(1,3),1:2] 取出指定行、列對(duì)應(yīng)的子矩陣。如 看整個(gè)矩陣: A

返回:

?取第一行:

A[1,]

返回:

取第一列:

A[,1]

返回:

?取1到3行,1到2列:

A[c(1,3), 1:2]

返回:

3.矩陣行列命名

colnames() 函 數(shù) 可 以 給 矩 陣 每 列 命 名, 也 可 以 訪 問(wèn) 矩 陣 列 名, 用 rownames() 函數(shù)可以給矩陣每行命名,也可以訪問(wèn)矩陣行名。如 colnames(A) <- c('X', 'Y') rownames(A) <- c('a', 'b', 'c') A

返回:

4.命名后取子集

矩陣可以有一個(gè) dimnames 屬性,此屬性是兩個(gè)元素的列表(列表見(jiàn)稍后部分的介紹),兩個(gè)元素分別為矩陣的行名字符型向量與列名字符型向量。如果僅有其中之一,缺失的一個(gè)取為 NULL 有了列名、行名后,矩陣下標(biāo)可以用字符型向量,如 A[,'Y'] A['b',] A[c('a', 'c'), 'Y']

返回:

注意在對(duì)矩陣取子集時(shí),如果取出的子集僅有一行或僅有一列,結(jié)果就不再是矩陣而是變成了 R 向量,R 向量既不是行向量也不是列向量。如果想避免這樣的規(guī)則起作用,需要在方括號(hào)下標(biāo)中加選項(xiàng) drop=FALSE,如

A[,1,drop=FALSE]

返回:

取出了 A 的第一列,作為列向量取出,所謂列向量實(shí)際是列數(shù)等于 1 的矩陣。如果用常量作為下標(biāo),其結(jié)果維數(shù)是確定的,不會(huì)出問(wèn)題;如果用表達(dá)式作為下標(biāo),則表達(dá)式選出零個(gè)、一個(gè)、多個(gè)下標(biāo),結(jié)果維數(shù)會(huì)有不同,加 drop=FALSE 則是安全的做法。

5.邏輯下標(biāo)取子集

矩陣也可以用邏輯下標(biāo)取子集,比如 A

返回:

A[A[,1]>=2,'Y']

返回:

6.正整數(shù)向量的矩陣取子集

矩陣本質(zhì)上是一個(gè)向量添加了 dim 屬性,實(shí)際保存還是保存成一個(gè)向量,其中元素的保存次序是按列填入,所以,也可以向?qū)σ粋€(gè)向量取子集那樣,僅用一個(gè)正整數(shù)向量的矩陣取子集。如 A

返回:?

A[c(1,3,5)]

返回:

為了挑選矩陣的任意元素組成的子集而不是子矩陣,可以用一個(gè)兩列的矩陣作為下標(biāo),矩陣的每行的兩個(gè)元素分別指定一個(gè)元素的行號(hào)和列號(hào)。如 ind <- matrix(c(1,1, 2,2, 3,2), ncol=2, byrow=TRUE) A

返回:

ind

返回:

A[ind]

返回:

c(A) A[] 返回矩陣 A 的所有元素。如果要修改矩陣 A 的所有元素,可以對(duì) A[] 賦值。

7.返回對(duì)角線向量

對(duì)矩陣 Adiag(A) 訪問(wèn) A 的主對(duì)角線元素組成的向量 diag(A)

返回:

8.創(chuàng)建單位矩陣

x 為正整數(shù)值標(biāo)量,diag(x) 返回 x 階單位陣;若 x 為長(zhǎng)度大于 1 的向量,diag(x) 返回以 x 的元素為主對(duì)角線元素的對(duì)角矩陣:

9.cbind() rbind() 函數(shù)

x 是向量,cbind(x) x 變成列向量,即列數(shù)為 1 的矩陣,rbind(x) 把 x 變成行向量。 x1, x2, x3 是等長(zhǎng)的向量,cbind(x1, x2, x3) 把它們看成列向量并在一起組成一個(gè)矩陣。cbind() 的自變量可以同時(shí)包含向量與矩陣,向量的長(zhǎng)度必須與矩陣行數(shù)相等。 如 cbind(c(1,2), c(3,4), c(5,6))

返回:

再如,

cbind(A, c(1,-1,10))

返回:

cbind() 的自變量中也允許有標(biāo)量,這時(shí)此標(biāo)量被重復(fù)使用。如

cbind(1, c(1,-1,10))

返回:

而rbind() 與cbind() 用法類(lèi)似,可以等長(zhǎng)的向量看成行向量上下摞在一起,可以是矩陣與長(zhǎng)度等于矩陣列數(shù)的向量上下摞在一起,向量長(zhǎng)度為 1 也可以。簡(jiǎn)單說(shuō)就是這兩個(gè)函數(shù)互為轉(zhuǎn)置!!

10.?矩陣運(yùn)算

10.1??四則運(yùn)算

矩陣可以與標(biāo)量作四則運(yùn)算,結(jié)果為每個(gè)元素進(jìn)行相應(yīng)運(yùn)算,如?

A

返回:

如加法運(yùn)算:

C1 <- A + 2; C1

返回:

?

如除法運(yùn)算:

C2 <- A / 2; C2

返回:

當(dāng)運(yùn)算為矩陣乘以一個(gè)標(biāo)量時(shí),就是線性代數(shù)中的矩陣的數(shù)乘運(yùn)算。兩個(gè)同形狀的矩陣進(jìn)行加、減運(yùn)算,即對(duì)應(yīng)元素相加、相減,用 A + BA - B 表示,如 C1 + C2

返回:

C1 - C2

返回:

這就是線性代數(shù)中矩陣的加、減運(yùn)算。 對(duì)兩個(gè)同形狀的矩陣,用 * 表示兩個(gè)矩陣對(duì)應(yīng)元素相乘 (注意這不是線性代數(shù)中的矩陣乘法),用/表示兩個(gè)矩陣對(duì)應(yīng)元素相除。如 C1 * C2

返回:

C1 / C2

返回:

10.2??矩陣乘法

%*% 表示矩陣乘法而不是用 * 表示,注意矩陣乘法要求左邊的矩陣的列數(shù)等于右邊的矩陣的行數(shù)。如 先看一下前面的A,B矩陣 A B

?返回:

?然后看一下矩陣相乘并賦值給c3

C3 <- A %*% B; C3

返回:

10.3?向量與矩陣相乘

B

返回:

看一下向量(1,1)與矩陣B相乘

c(1,1) %*% B

返回:

再看一下矩陣B與向量(1,1)相乘

B %*% c(1,1)

返回:

再看一下 向量*矩陣*向量

c(1,1) %*% B %*% c(1,1)

返回:

注意:矩陣乘法總是給出矩陣結(jié)果,即使此矩陣已經(jīng)退化為行向量、列向量甚至于退化為標(biāo)量也是一樣。如果需要,可以用 c() 函數(shù)把一個(gè)矩陣轉(zhuǎn)換成按列拉直的向量。

10.4 內(nèi)積

設(shè) x, y 是兩個(gè)向量,計(jì)算向量?jī)?nèi)積,可以用 sum(x*y) 表示。 設(shè) A, B 是兩個(gè)矩陣,ATB 是廣義的內(nèi)積,也稱(chēng)為叉積 (crossprod),結(jié)果是一個(gè)矩陣,元素為 A 的每列與 B 的每列計(jì)算內(nèi)積的結(jié)果。ATB R 中可以表示為 crossprod(A, B), AT A 可以表示為 crossprod(A)。要注意的是,crossprod() 的結(jié)果總是矩陣,所以計(jì)算兩個(gè)向量的內(nèi)積用 sum(x,y) 而不用 crossprod(x,y)。 如: sum(A,B) crossprod(A,B)

返回:

10.5 外積

R 向量支持外積運(yùn)算,記為%o%, 結(jié)果為矩陣。x %o% y 的第 i 行第 j 列元素等于 x[i] 乘以 y[j]。如 c(1,2,3) %o% c(1, -1)

返回:

?

這種運(yùn)算還可以推廣到 x 的每一元素與 y 的每一元素進(jìn)行其它的某種運(yùn)算,而不限于乘積運(yùn)算,可以用 outer(x,y,f) 完成,其中 f 是某種運(yùn)算,或者接受兩個(gè)自變量的函數(shù)。

10.6?逆矩陣與線性方程組求解

solve(A) A 的逆矩陣,如

solve(A) solve(B)

返回:

solve(A,b) 求解線性方程組 Ax = b 中的 x, 求解線性方程組

B

返回:

solve(B, c(1,2))

返回:

10.7?apply() 函數(shù)

apply(A, 2, FUN) 把矩陣 A 的每一列分別輸入到函數(shù) FUN 中,得到對(duì)應(yīng)于每一列的結(jié)果,如 D <- matrix(c(6,2,3,5,4,1), nrow=3, ncol=2); D

返回:

apply(D, 2, sum)

返回:

apply(A, 1, FUN) 把矩陣 A 的每一行分別輸入到函數(shù) FUN 中,得到與每一行對(duì)應(yīng)的結(jié)果,如 apply(D, 1, mean)

返回:

如果函數(shù) FUN 返回多個(gè)結(jié)果,則 apply(A, 2, FUN) 結(jié)果為矩陣,矩陣的每一列是輸入矩陣相應(yīng)列輸入到 FUN 的結(jié)果,結(jié)果列數(shù)等于 A 的列數(shù)。如 apply(D, 2, range)

返回:

如果函數(shù) FUN 返回多個(gè)結(jié)果,為了對(duì)每行計(jì)算 FUN 的結(jié)果,結(jié)果存入一個(gè)與輸入的矩陣行數(shù)相同的矩陣,應(yīng)該用 t(apply(A, 1, FUN)) 的形式,如 t(apply(D, 1, range))

返回:

10.8?多維數(shù)組

矩陣是多維數(shù)組 (array) 的特例。矩陣是 xij , i = 1, 2, . . . , n, j = 1, 2, . . . , m 這樣的兩下標(biāo)數(shù)據(jù)的存貯格式,三維數(shù)組是 xijk, i = 1, 2, . . . , n, j = 1, 2, . . . , m, k = 1, 2, . . . , p 這樣的三下標(biāo)數(shù)據(jù)的存貯格式,s 維數(shù)組則是有 s 個(gè)下標(biāo)的數(shù)據(jù)的存貯格式。實(shí)際上,給一個(gè)向量添加一個(gè) dim 屬性就可以把它 變成多維數(shù)組。 多維數(shù)組的一般定義語(yǔ)法為 ????????數(shù)組名 <- array(數(shù)組元素, ????????????????dim=c(第一下標(biāo)個(gè)數(shù), 第二下標(biāo)個(gè)數(shù), ..., s下標(biāo)個(gè)數(shù))) 其中數(shù)組元素的填入次序是第一下標(biāo)變化最快,第二下標(biāo)次之,最后一個(gè)下標(biāo) 是變化最慢的。這種次序稱(chēng)為 FORTRAN 次序。 下面是一個(gè)三維數(shù)組定義例子。 ara <- array(1:24, dim=c(2,3,4)); ara

返回:

這樣的數(shù)組保存了 xijk, i = 1, 2, j = 1, 2, 3, k = 1, 2, 3, 4。三維數(shù)組 ara 可以看成是 4 個(gè) 2 × 3 矩陣。取出其中一個(gè)如 ara[,,2](取出第二個(gè)矩陣) ara[,,2]

返回:

多維數(shù)組可以利用下標(biāo)進(jìn)行一般的子集操作,比如 ara[,2, 2:3] xijk, i = 1, 2, j = 2, k = 2, 3 的值,結(jié)果是一個(gè) 2 × 2 矩陣: ara[,2,2:3]

返回:

多維數(shù)組在取子集時(shí)如果某一維下標(biāo)是標(biāo)量,則結(jié)果維數(shù)會(huì)減少,可以在方括號(hào)內(nèi)用 drop=FALSE 選項(xiàng)避免這樣的規(guī)則發(fā)生作用。 類(lèi)似于矩陣,多維數(shù)組可以用一個(gè)矩陣作為下標(biāo),如果是三維數(shù)組,矩陣就需要有 3 列,四維數(shù)組需要用 4 列矩陣。下標(biāo)矩陣的每行對(duì)應(yīng)于一個(gè)數(shù)組元素。

總結(jié)

以上是生活随笔為你收集整理的R语言基础入门(10)之矩阵和数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。