如何实现向量中每隔n个元素与其相邻元素的求和操作
解决方案
原代码问题说明
你现有代码的问题是仅生成了2个随机数做累计和后重复800次,会导致所有奇数位、偶数位的数值分别完全相同,无法得到1600个独立的计算结果。
实现方法
直接先生成完整的1600个符合分布的随机值,再通过向量化操作批量修改偶数位取值即可,无需写循环,执行效率很高。
方法1:索引直接修改(最易理解)
# 生成1600个符合要求的原始随机向量 raw_vec <- rnorm(n = 1600, mean = 5000, sd = 1000) res_vec <- raw_vec # 批量修改偶数位置:偶数位 = 前一位奇数位原值 + 自身原值 res_vec[seq(2, 1600, 2)] <- raw_vec[seq(1, 1599, 2)] + raw_vec[seq(2, 1600, 2)]
方法2:矩阵转换实现(代码更简洁)
利用R矩阵按列填充的特性,把向量拆分为2行800列的矩阵,修改第二行(对应原偶数位)的取值后转回向量即可:
raw_vec <- rnorm(n = 1600, mean = 5000, sd = 1000) mat <- matrix(raw_vec, nrow = 2) mat[2, ] <- colSums(mat) res_vec <- as.vector(mat)
内容的提问来源于stack exchange,提问作者user13973103
相关产品推荐
相关产品推荐

