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

R语言中如何基于0-1矩阵自身行运算生成符合要求的新矩阵

R语言实现二进制矩阵指定运算方案

实现方法

方法1:循环实现(逻辑清晰,适合小规模矩阵)

直接按需求描述的逻辑遍历每一行计算,可读性高,不容易出错:

# 定义示例矩阵
matrix_A <- matrix(c(0,0,1,1,1,0,1,0,1,0,1,1), nrow=3,ncol=4)
# 初始化和原矩阵行列一致的结果矩阵
result <- matrix(0, nrow = nrow(matrix_A), ncol = ncol(matrix_A))
# 遍历每一行计算
for (i in seq_len(nrow(matrix_A))) {
  # 取出除当前行外的所有行,drop=FALSE保证即使只剩1行也保持矩阵结构
  other_rows <- matrix_A[-i, , drop = FALSE]
  # 其余行逐行与当前行做元素级乘法后,按列求和赋值给结果矩阵对应行
  result[i, ] <- colSums(other_rows * matrix_A[i, ])
}

运行后输出result即可得到目标矩阵。

方法2:向量化实现(性能优异,适合大规模矩阵)

利用矩阵运算特性规避显式循环,处理行数较多的矩阵时效率远高于循环方案:

matrix_A <- matrix(c(0,0,1,1,1,0,1,0,1,0,1,1), nrow=3,ncol=4)
n <- nrow(matrix_A)
# 构造对角线为0、其余元素为1的掩码矩阵
mask <- matrix(1, nrow = n, ncol = n) - diag(n)
# 先通过矩阵乘法得到每列除当前行外的元素和,再和原矩阵逐元素相乘得到结果
result <- (mask %*% matrix_A) * matrix_A

该方案的逻辑为:掩码矩阵与原矩阵相乘后,得到的矩阵第i行j列的值为原矩阵第j列中除第i行外所有元素的和;再与原矩阵逐元素相乘时,原矩阵对应位置为0则结果直接归零,为1则保留其他行的求和结果,完全匹配需求规则。

验证结果

示例矩阵运行两种方法后得到的result均为:

[,1] [,2] [,3] [,4]
[1,]    0    1    1    0
[2,]    0    1    0    1
[3,]    0    0    1    1

与题目给出的目标结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:04