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

如何用优雅高效的方法提取R语言中3D数组的全部对角线?

3D数组对角线的高效分组方法

核心思路

和2D矩阵利用行索引-列索引分组对角线的思路类似,3D数组中,同一对角线上的元素满足:行索引与列索引的差值固定,且列索引与层索引的差值固定(每沿对角线移动一步,行、列、层索引同步+1,因此行-列、列-层的数值始终不变)。我们可以通过这两个差值的组合作为分组键,实现高效的对角线提取。

代码实现

# 定义示例3D数组
arr <- array(1:60, dim = c(5, 4, 3))

# 构造三个维度的索引矩阵
row_idx <- row(arr)
col_idx <- col(arr)
slice_idx <- array(rep(1:dim(arr)[3], each = prod(dim(arr)[1:2])), dim = dim(arr))

# 计算分组键:行-列、列-层的差值组合
group_key <- interaction(row_idx - col_idx, col_idx - slice_idx)

# 按分组键拆分数组,得到所有对角线列表
diagonals_3d <- split(arr, group_key)

结果验证

提取几个示例对角线验证:

  • 对应[1,1,1]的分组键为0.0,取值:diagonals_3d[["0.0"]] → c(1, 27, 53)
  • 对应[3,2,1]的分组键为1.1,取值:diagonals_3d[["1.1"]] → c(8, 34, 60)
  • 对应[1,3,1]的分组键为-2.2,取值:diagonals_3d[["-2.2"]] → c(11, 37)
  • 对应[1,2,2]的分组键为-1.0,取值:diagonals_3d[["-1.0"]] → c(26, 52)

该方法完全基于向量运算,避免了循环迭代,和2D场景的解决方案保持了同样的优雅与高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:32:08