1 条题解

  • 0
    @ 2026-3-26 22:37:55

    NUMPY020 题解:3D数组索引转换

    题目

    给定 3D 数组形状 (a, b, c) 和一维索引 k,求对应的三维坐标 (x, y, z)。


    代码

    import numpy as np
    
    a, b, c, k = map(int, input().split())
    x, y, z = np.unravel_index(k, (a, b, c))
    print(x, y, z)
    

    代码详解

    np.unravel_index

    np.unravel_index(索引, 形状)
    

    将一维索引转为多维索引。

    示例

    np.unravel_index(0, (6, 7, 8))  # (0, 0, 0)
    np.unravel_index(99, (6, 7, 8)) # (1, 5, 3)
    

    索引展开原理

    行优先顺序(C order)

    NumPy 按行展开索引:

    形状 (2, 3, 4):
    
    索引:     坐标:
    0    →  (0, 0, 0)
    1    →  (0, 0, 1)
    2    →  (0, 0, 2)
    3    →  (0, 0, 3)
    4    →  (0, 1, 0)
    ...以此类推
    

    计算公式

    对于形状 (a, b, c):

    • x=k//(b×c)x = k // (b \times c)
    • y=(k//c)y = (k // c) % b
    • z=kz = k % c

    其他实现方法

    方法2:手动计算

    import numpy as np
    
    a, b, c, k = map(int, input().split())
    x = k // (b * c)
    y = (k // c) % b
    z = k % c
    print(x, y, z)
    

    核心知识点

    知识点 说明
    np.unravel_index() 一维转多维索引
    行优先顺序 NumPy 默认索引方式
    • 1

    信息

    ID
    466
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者