You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中修改矩阵的L型区域是否有更简便的方法?

方阵L型区域元素批量运算的简化实现

问题背景

现有10×10方阵abmat,需对第7-10行(g-j行)和第7-10列(g-j列)覆盖的所有元素执行乘10操作(即包含右下角4×4区域、前6行的后4列、后4行的前6列的L型区域)。尝试通过排除法仅能选中右下角区域,拆分行列赋值的方式可行但步骤繁琐,希望找到更直接的实现方法。

初始矩阵构造

abmat <- matrix(
  data = rpois(n = 10*10, lambda = 1),
  nrow = 10,
  dimnames = list(letters[1:10], letters[1:10])
)

输出结果:

a b c d e f g h i j
a 0 2 2 1 0 0 0 1 1 2
b 2 1 2 2 0 1 0 0 1 1
c 1 0 1 2 0 2 2 1 1 0
d 0 2 0 0 1 3 1 1 3 1
e 0 0 1 1 3 2 1 1 1 0
f 1 1 1 1 2 0 2 1 0 1
g 0 0 2 1 0 0 0 0 1 3
h 0 2 2 0 1 0 2 1 1 1
i 1 1 0 2 0 0 2 1 0 1
j 0 0 2 0 0 0 1 1 2 1

尝试的无效方法(排除法)

仅能选中右下角4×4区域,无法覆盖完整L型:

abmat[-1:-6, -1:-6]*10

输出结果:

g  h  i  j
g  0  0 10 30
h 20 10 10 10
i 20 10  0 10
j 10 10 20 10

可行但繁琐的拆分实现

分两次赋值,先处理后4行所有列,再处理前6行的后4列:

abmat2 <- abmat
abmat2[7:10,] <- abmat[7:10,]*10
abmat2[1:6, 7:10] <- abmat[1:6, 7:10]*10

输出结果:

a  b  c  d  e f  g  h  i  j
a  0  2  2  1  0 0  0 10 10 20
b  2  1  2  2  0 1  0  0 10 10
c  1  0  1  2  0 2 20 10 10  0
d  0  2  0  0  1 3 10 10 30 10
e  0  0  1  1  3 2 10 10 10  0
f  1  1  1  1  2 0 20 10  0 10
g  0  0 20 10  0 0  0  0 10 30
h  0 20 20  0 10 0 20 10 10 10
i 10 10  0 20  0 0 20 10  0 10
j  0  0 20  0  0 0 10 10 20 10

更直接的简化实现

利用逻辑索引一次性选中所有目标元素,无需拆分操作:

abmat3 <- abmat
# 生成逻辑索引:行属于7-10 或 列属于7-10
idx <- (row(abmat3) %in% 7:10) | (col(abmat3) %in% 7:10)
# 对选中元素执行乘10操作
abmat3[idx] <- abmat3[idx] * 10

运行后abmat3的结果与上述abmat2完全一致,仅需两行核心代码即可完成需求。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:50:28