需求:有一个向量row_value,需要生成一个每行都为向量row_value的n_rows行矩阵。
方法一:使用rep和matrix函数
先使用rep()函数将向量row_value重复多次,然后利用matrix()创建矩阵,并通过指定byrow=T设置按行填充
# 定义每行的值
row_value = c(1, 2, 3)
# 生成一个矩阵,每行都一样
n_rows = 5 # 矩阵的行数
n_cols = length(row_value) # 矩阵的列数
matrix_rep = matrix(rep(row_value, each = n_rows), nrow = n_rows, byrow = TRUE)
print(matrix_rep)
方法二:使用 kronecker 函数
kronecker()函数计算任意两个矩阵的kronecker积,如果A矩阵为x * y,B矩阵为m * n,则A和B矩阵的kronecker积则为一个xm * yn的矩阵。举例,A矩阵为2行3列,B矩阵为3行4列,则A和B矩阵的kronecker积则为2 * 3=6行,3 * 4=12列的矩阵。
image-20240611122821561.png
image-20240611122842010.png
因此在计算kronecker积时,如何将第一个矩阵设置为行数为n_rows,列数为1的空矩阵,将其与向量row_value转化成的行数为1的矩阵相乘,则可以直接得到每行都为row_value的矩阵。
# 定义每行的值
row_value = c(1, 2, 3)
# 生成一个矩阵,每行都一样
n_rows = 5 # 矩阵的行数
matrix_rep = kronecker(matrix(1, nrow = n_rows, ncol = 1), matrix(row_value, nrow = 1))
print(matrix_rep)
方法三:使用 apply 函数
如果你有一个行向量,可以使用 apply 函数将其应用于一个初始矩阵的每一行。
# 定义每行的值
row_value = c(1, 2, 3)
# 生成一个初始矩阵
n_rows = 5 # 矩阵的行数
n_cols = length(row_value) # 矩阵的列数
initial_matrix = matrix(0, nrow = n_rows, ncol = n_cols)
# 将行向量应用于每一行
matrix_rep = apply(initial_matrix, 1, function(x) row_value)
matrix_rep = t(matrix_rep) # 转置回原始形状,这里因为apply函数的结果是按列绑定的,即每次应用函数返回的一行会变成一列
print(matrix_rep)