在R中快速生成每一行都一样的矩阵

需求:有一个向量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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容