R中如何使用for循环实现Binomial tree二项树矩阵格式转换
实现逻辑
你现有的二项树矩阵(矩阵1)结构为每一列对应一个时间步,节点值从矩阵底部向上依次填充,剩余位置为NA;目标矩阵(矩阵2)需要将每一列的节点值改为从矩阵顶部向下依次填充,剩余位置留空。
示例代码
首先构造和你结构一致的示例矩阵1用于测试:
# 构造示例原始矩阵(矩阵1),步长可自行修改 time_step <- 4 mat1 <- matrix(NA, nrow = time_step, ncol = time_step) for (i in 1:time_step) { mat1[(time_step - i + 1):time_step, i] <- 10*i + 1:i }
核心转换for循环代码:
row_num <- nrow(mat1) col_num <- ncol(mat1) # 初始化目标矩阵 mat2 <- matrix(NA, nrow = row_num, ncol = col_num) # 按列遍历完成转换 for (col_idx in 1:col_num) { # 提取当前列所有非NA的节点值 current_vals <- mat1[!is.na(mat1[, col_idx]), col_idx] # 从目标矩阵当前列的第一行开始填充值 mat2[1:length(current_vals), col_idx] <- current_vals }
验证结果:
# 打印原始矩阵和转换后的矩阵对比 print("原始矩阵1:") print(mat1) print("转换后矩阵2:") print(mat2)
如果你的原始矩阵填充方向和上述示例相反,只需要修改mat2的填充位置即可,比如要从底部填充就把1:length(current_vals)替换为(row_num - length(current_vals) + 1):row_num。
内容的提问来源于stack exchange,提问作者deyanddimov
相关产品推荐
相关产品推荐

