Array 陣列 (多維)

  • create/input
    • create 建立
    • input 讀入
  • select elements 選擇元素
  • modify
    • add 增加
    • delete 刪除
    • replace 取代
    • 更新
  • operate
    • 運算:+-*/
    • Iteration: loop, 反覆運算,疊代,迭代
  • output
    • output:輸出

  • create/input
    • create 建立
      • rbind()
      • cbind()
      • array() # 多維度的陣列
    • input 讀入
  • select elements 選擇元素
  • modify
    • add 增加
    • delete 刪除
    • replace 取代
    • 更新
  • operate
    • 運算:+-*/
    • Iteration: loop, 反覆運算,疊代,迭代
  • output
    • output:輸出

  • create/input
    • 利用 rbind()、cbind() 與 array() 函數建立陣列
    • 多維度的陣列則是使用 array() 函數來建立
x <- c(1, 2, 3)
y <- c(4, 5, 6)

rbind(x, y) # rbind 是利用 row(橫) 合併。

  [,1] [,2] [,3]
x    1    2    3
y    4    5    6

cbind(x, y) # cbind 是利用 column(直) 合併。

     x y
[1,] 1 4
[2,] 2 5
[3,] 3 6

array(x,c(1,3)) # c(1,3) 代表產生 1 x 3 陣列

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

array(x,c(2,3)) # c(2,3) 代表產生 2 x 3 陣列

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

array(x,c(3,3)) # c(3,3) 代表產生 3 x 3 陣列

     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
  • dim()
array(1:24, dim = c(4, 3, 2))

, , 1

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

[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12

, , 2

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

[1,] 13 17 21
[2,] 14 18 22
[3,] 15 19 23
[4,] 16 20 24

  • 多維度的陣列也可以使用 dimnames 參數指定每個維度的資料名稱
array(1:24, dim = c(4, 3, 2), dimnames = list(
  X = c("A1","A2","A3","A4"),
  Y = c("B1", "B2", "B3"), Z = c("C1", "C2")))

, , Z = C1

Y

X B1 B2 B3
A1 1 5 9
A2 2 6 10
A3 3 7 11
A4 4 8 12

, , Z = C2

Y

X B1 B2 B3
A1 13 17 21
A2 14 18 22
A3 15 19 23
A4 16 20 24

  • 二維的陣列就是矩陣,不管使用 matrix 或是 array 來產生,結果都是一樣的
x.matrix <- matrix(1:6, nrow = 2, ncol = 3)
x.array <- array(1:6, dim = c(2, 3))
identical(x.matrix, x.array)

[1] TRUE

  • 檢查 x.array 的類型,會發現它實際上就是一個矩陣變數:
class(x.array)

[1] "matrix"

  • nrow 與 ncol 函數可以檢查矩陣的列數與行數:
nrow(x.matrix)

[1] 2

ncol(x.matrix)

[1] 3

  • nrow 與 ncol 函數若用於多維度的陣列,會傳回前兩個維度的長度。
x.array <- array(1:60, dim = c(3, 4, 5))
nrow(x.array)

[1] 3

ncol(x.array)

[1] 4

  • length 函數也可以用於矩陣或是陣列,他會計算矩陣或陣列中所有元素的個數(也就是所有維度長度的乘積):
length(x.matrix)

[1] 6

length(x.array)

[1] 60

  • 若要改變矩陣或陣列的維度,可以使用 dim 指定新的維度:
x.matrix <- matrix(1:12, nrow = 4, ncol = 3)
dim(x.matrix) <- c(2, 6)
x.matrix
    [,1] [,2] [,3] [,4] [,5] [,6]

[1,] 1 3 5 7 9 11
[2,] 2 4 6 8 10 12

  • 甚至可以透過改變維度,將二維矩陣轉換為高維度的陣列:
dim(x.matrix) <- c(2, 3, 2)
x.matrix

, , 1

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

[1,] 1 3 5
[2,] 2 4 6

, , 2

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

[1,] 7 9 11
[2,] 8 10 12

  • nrow、ncol 與 dim 這幾個函數如果用在一維的向量時,會傳回 NULL,
    • 如果想要避免這個問題,可以改用 NROW 與 NCOL 函數,這兩個函數的作用跟 nrow 與 ncol 相同,但是當遇到一維的向量時也可以傳回有意義的值:
x.vector <- 1:5
nrow(x.vector)

NULL

NROW(x.vector)

[1] 5

ncol(x.vector)

NULL

NCOL(x.vector)

[1] 1


Reference:

results matching ""

    No results matching ""