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

如何将矩阵转换为3D矩阵以支持list[i][j][k]索引访问?

解决方案

首先,你的原始矩阵外层多了一层不必要的列表包裹,且每个单元格是单个数值类型(无法通过[0]索引)。要实现list[i][j][k]的访问形式,需要两步转换:

  1. 移除外层多余的列表,得到二维矩阵
  2. 将每个单元格的数值转换为包含两个元素的列表(对应k=0和k=1的行/列索引)

具体代码实现

根据你对k的定义(k=0为指向的行索引,k=1为指向的列索引),分两种常见场景处理:

场景1:原单元格数值就是指向的行/列索引

如果原矩阵中每个单元格的数值直接代表指向的行索引,且列索引与行索引相同:

a = [[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [2, 3, 2, 3, 4,5], [3, 2, 3, 4, 3, 4], [4, 3, 4, 5, 4, 3], [5, 4, 5, 6, 5, 4]]]

# 第一步:移除外层多余列表,得到二维矩阵
a_2d = a[0]
# 第二步:将每个元素转为包含两个元素的列表
a_3d = [[[val, val] for val in row] for row in a_2d]

# 现在可以按目标形式访问
print(a_3d[5][5][0])  # 输出4
print(a_3d[5][5][1])  # 输出4

场景2:单元格指向的行/列索引是其自身的位置(i,j)

如果希望list[i][j][0]返回当前单元格的行号i,list[i][j][1]返回列号j:

a = [[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [2, 3, 2, 3, 4,5], [3, 2, 3, 4, 3, 4], [4, 3, 4, 5, 4, 3], [5, 4, 5, 6, 5, 4]]]

a_2d = a[0]
a_3d = [[[i, j] for j, _ in enumerate(row)] for i, row in enumerate(a_2d)]

print(a_3d[5][5][0])  # 输出5
print(a_3d[5][5][1])  # 输出5

为什么之前的尝试失败?

  • 直接用括号包裹列表:只是增加了嵌套层级,没有把单个数值转为可索引的列表
  • b = [[i] for i in a]:仅在外层列表基础上再嵌套一层,没有处理内层的单个数值元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:20:30