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

R语言:如何获取矩阵列表逐元素最小值的来源矩阵?

解决方案:追踪最小值对应的来源矩阵

针对你的需求,我们可以通过将矩阵列表转换为三维数组,再结合apply函数轻松定位每个最小值来自列表中的哪个矩阵,步骤清晰且高效:

步骤1:计算最小值矩阵

先用你已经熟悉的方式得到所有矩阵对应位置的最小值:

min_mat <- do.call(pmin, d)

步骤2:转换为三维数组并追踪来源

把矩阵列表转换成三维数组(每个矩阵对应数组的一个切片),然后对每个元素位置(行和列维度)使用which.min找到最小值所在的矩阵索引:

# 将列表转换为三维数组
arr <- simplify2array(d)
# 对每个(row, col)位置,找到最小值对应的矩阵索引
source_mat <- apply(arr, c(1, 2), which.min)

验证结果

现在查看source_mat就能直观看到每个最小值的来源:

> source_mat
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    1    1    1    1    1
[3,]    2    2    1    1    1
[4,]    1    1    1    1    1
[5,]    1    1    1    1    1

举几个例子验证:

  • 第3行第1列的最小值是2,来自第二个矩阵(d[[2]]也就是x),对应source_mat[3,1] = 2,和实际情况完全一致;
  • 第4行第2列的最小值是-4,来自第一个矩阵(d[[1]]也就是z),对应source_mat[4,2] = 1,准确无误。

处理多矩阵最小值相同的情况

如果某个位置有多个矩阵的数值等于最小值,which.min会返回第一个出现的矩阵索引。如果你需要获取所有符合条件的矩阵索引,可以把which.min替换成自定义函数:

source_mat_all <- apply(arr, c(1, 2), function(x) which(x == min(x)))

这样每个位置会返回一个向量,包含所有提供最小值的矩阵索引。

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

相关产品推荐
方舟 Agent Plan

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

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