在R中快速生成每一行都一樣的矩陣

需求:有一個(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)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容