You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何无循环填充10×1矩阵:每两个0后填充两个1

无循环实现重复模式矩阵填充的方法

嘿,我来帮你搞定这个需求!要生成你想要的10×1矩阵,完全不用循环,用R里的内置函数就能轻松实现,而且代码简洁又高效。

方法一:用rep()函数(最直观简洁)

这是最适合你这种固定重复模式的方案,直接定义基础模式后重复到指定长度:

value <- 10
# 定义重复的核心模式:两个0跟着两个1
pattern <- c(0, 0, 1, 1)
# 重复模式直到总长度等于value,再转成矩阵
coef <- matrix(rep(pattern, length.out = value), nrow = value)

运行后coef就是你要的结果:

[,1]
 [1,]    0
 [2,]    0
 [3,]    1
 [4,]    1
 [5,]    0
 [6,]    0
 [7,]    1
 [8,]    1
 [9,]    0
[10,]    0

这个方法的好处是逻辑清晰,不管value改成多大(比如100、1000),代码都不用改,自动适配长度。

方法二:用取模运算动态判断

如果你想通过行号的规律来生成,也可以用取模运算实现无循环赋值:

value <- 10
# 对行号(从0开始计数)取模4,余数为2或3时设为1,否则为0
coef <- matrix(ifelse((1:value - 1) %% 4 %in% c(2, 3), 1, 0), nrow = value)

原理是:把行号减1后,每4个为一组,第3、4个位置(对应余数2、3)设为1,其余为0,刚好匹配你的模式。

对比你之前手动逐个赋值的方式,这两种无循环方法不仅写起来快,后续维护也方便——要是以后需要调整模式(比如改成0,1,1,0),只需要修改pattern或者取模的判断条件就行,不用改一堆行的赋值代码。

内容的提问来源于stack exchange,提问作者Ville

火山引擎 最新活动