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

如何查找矩阵列表中各对应位置的最小值

解决矩阵列表对应位置取最小值的问题

嘿,我来帮你搞定这个需求!你想要从两个矩阵的对应位置元素中取最小值生成新矩阵对吧?先帮你修正原始代码里的两处小问题:一是缺少矩阵x和z的初始化,二是列表d的定义有误(把向量k放进去了,应该换成矩阵z)。

先补全并修正你的原始代码

# 初始化5x5的0矩阵x
x <- matrix(0, 5, 5)
y <- c(3,2,4,5,6, 4,5,5,6,7)
x[lower.tri(x, diag=F)] <- y
x

# 初始化5x5的0矩阵z
z <- matrix(0, 5, 5)
k <- c(1,4,5,2,5,-4,4,4,4,5)
z[lower.tri(z, diag=F)] <- k
z

# 修正列表定义:放入两个矩阵x和z
d <- list(x, z)

方法1:用do.call() + pmin()(最简洁高效)

pmin()函数可以按元素对多个对象取最小值,配合do.call()能把列表里的所有矩阵作为参数传入,一行代码就能搞定:

# 生成对应位置取最小值的矩阵
dd <- do.call(pmin, d)

# 查看结果
dd

运行后会得到你预期的输出:

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

方法2:手动遍历元素(适合理解原理)

如果你想手动实现这个逻辑,可以用双重循环逐个比较每个位置的元素:

# 初始化空矩阵
dd <- matrix(0, 5, 5)

# 遍历每一行和每一列,取对应位置的最小值
for (i in 1:nrow(x)) {
  for (j in 1:ncol(x)) {
    dd[i,j] <- min(x[i,j], z[i,j])
  }
}

# 查看结果
dd

这个方法和方法1的结果完全一致,只是代码更长,适合用来理解底层的元素比较逻辑。

小提示

如果你的矩阵列表里有3个及以上矩阵,这个方法依然适用——pmin()会自动对所有矩阵的对应元素取最小值,不需要修改代码哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:10