需求:有一個(gè)向量row_value,需要生成一個(gè)每行都為向量row_value的n_rows行矩陣。
方法一:使用rep和matrix函數(shù)
先使用rep()函數(shù)將向量row_value重復(fù)多次,然后利用matrix()創(chuàng)建矩陣,并通過(guò)指定byrow=T設(shè)置按行填充
# 定義每行的值
row_value = c(1, 2, 3)
# 生成一個(gè)矩陣,每行都一樣
n_rows = 5 # 矩陣的行數(shù)
n_cols = length(row_value) # 矩陣的列數(shù)
matrix_rep = matrix(rep(row_value, each = n_rows), nrow = n_rows, byrow = TRUE)
print(matrix_rep)
方法二:使用 kronecker 函數(shù)
kronecker()函數(shù)計(jì)算任意兩個(gè)矩陣的kronecker積,如果A矩陣為x * y,B矩陣為m * n,則A和B矩陣的kronecker積則為一個(gè)xm * yn的矩陣。舉例,A矩陣為2行3列,B矩陣為3行4列,則A和B矩陣的kronecker積則為2 * 3=6行,3 * 4=12列的矩陣。

image-20240611122821561.png

image-20240611122842010.png
因此在計(jì)算kronecker積時(shí),如何將第一個(gè)矩陣設(shè)置為行數(shù)為n_rows,列數(shù)為1的空矩陣,將其與向量row_value轉(zhuǎn)化成的行數(shù)為1的矩陣相乘,則可以直接得到每行都為row_value的矩陣。
# 定義每行的值
row_value = c(1, 2, 3)
# 生成一個(gè)矩陣,每行都一樣
n_rows = 5 # 矩陣的行數(shù)
matrix_rep = kronecker(matrix(1, nrow = n_rows, ncol = 1), matrix(row_value, nrow = 1))
print(matrix_rep)
方法三:使用 apply 函數(shù)
如果你有一個(gè)行向量,可以使用 apply 函數(shù)將其應(yīng)用于一個(gè)初始矩陣的每一行。
# 定義每行的值
row_value = c(1, 2, 3)
# 生成一個(gè)初始矩陣
n_rows = 5 # 矩陣的行數(shù)
n_cols = length(row_value) # 矩陣的列數(shù)
initial_matrix = matrix(0, nrow = n_rows, ncol = n_cols)
# 將行向量應(yīng)用于每一行
matrix_rep = apply(initial_matrix, 1, function(x) row_value)
matrix_rep = t(matrix_rep) # 轉(zhuǎn)置回原始形狀,這里因?yàn)閍pply函數(shù)的結(jié)果是按列綁定的,即每次應(yīng)用函數(shù)返回的一行會(huì)變成一列
print(matrix_rep)