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

如何用R基础包替换矩阵乘法中的*为min/max等二元运算符

矩阵乘法替换运算符的R实现

原始代码示例

library(Matrix)
A <- matrix(c(1,2,3,4,5,6), nrow=3)
A
t(A)
A %*% t(A)

原始运行输出

#  A
#      [,1] [,2]
#  [1,]    1    4
#  [2,]    2    5
#  [3,]    3    6
#
#  t(A)
#       [,1] [,2] [,3]
#  [1,]    1    2    3
#  [2,]    4    5    6
#  
#  A %*% t(A)
#       [,1] [,2] [,3]
#  [1,]   17   22   27
#  [2,]   22   29   36 <---
#  [3,]   27   36   45

技术问题

如何在R基础包中,将矩阵乘法中的乘法运算符*替换为其他二元运算符(如min或max)?

以结果矩阵的第2行第3列元素为例:

  • 原矩阵乘法逻辑:2 * 3 + 5 * 6 = 36
  • 期望改为以下两种计算方式之一:
    • min(2,3) + min(5,6) = 7
    • max(2,3) + max(5,6) = 9

解决方案

在R基础包里,不需要额外依赖包,通过自定义函数就能实现这类替换运算,核心是对矩阵的行和列逐元素执行目标运算后求和。

1. 替换为min的运算实现

# 自定义函数:对行和列的元素逐对取min后求和
matrix_min_sum <- function(row, mat_col) {
  colSums(pmin(row, mat_col))
}

# 对矩阵A的每一行,和t(A)执行运算后转置得到结果
result_min <- t(apply(A, 1, matrix_min_sum, mat_col = t(A)))
result_min

运行结果:

[,1] [,2] [,3]
[1,]    5    6    7
[2,]    6    7    7
[3,]    7    7    9

其中第2行第3列的元素为7,符合预期。

2. 替换为max的运算实现

# 自定义函数:对行和列的元素逐对取max后求和
matrix_max_sum <- function(row, mat_col) {
  colSums(pmax(row, mat_col))
}

# 执行运算
result_max <- t(apply(A, 1, matrix_max_sum, mat_col = t(A)))
result_max

运行结果:

[,1] [,2] [,3]
[1,]    8    9   10
[2,]    9   10    9
[3,]   10    9   12

其中第2行第3列的元素为9,符合预期。

3. 通用化替换

如果需要换成其他二元运算符,只需要修改pmin/pmax为目标函数即可,注意要保证函数支持向量化运算。比如想替换成减法,就把pmin换成-,再根据需求调整求和逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:20:03