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

如何将Numpy索引转换为坐标?自定义数组类getitem实现需求

索引转坐标的实现方案

全坐标生成+筛选法

对于任意形状的数组,先生成所有元素的完整坐标矩阵,再根据传入的索引条件筛选目标坐标。以形状(2,2,2)为例:

  1. 生成全维度坐标:
import numpy as np
shape = (2,2,2)
# 生成各维度的索引网格,转换为(N, 维度数)的坐标数组
coords = np.stack(np.indices(shape), axis=-1).reshape(-1, len(shape))
# 输出:[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
  1. 按索引...,1筛选:
    这个索引等价于前两维取所有、第三维固定为1,直接对坐标数组的第三列做条件判断即可:
mask = coords[:, 2] == 1
selected_coords = coords[mask]
# 输出:[[0,0,1],[0,1,1],[1,0,1],[1,1,1]]

通用索引适配方案

如果要支持所有Numpy风格索引(省略号、切片、整数索引、布尔索引等),可以通过占位数组反向推导坐标:

shape = (2,2,2)
dummy = np.zeros(shape)
# 用用户传入的索引提取子数组
sub_array = dummy[..., 1]
# 获取子数组在原数组中的位置索引
indices = np.where(sub_array)
# 组合为(N, 维度数)的坐标数组
selected_coords = np.stack(indices, axis=-1)

这种方法自动适配所有索引类型,无需手动解析省略号或切片逻辑。

适配块稀疏张量场景

在你的自定义张量类__getitem__方法中,可以按以下流程处理:

  • 根据张量的形状初始化坐标生成逻辑
  • 用上述方法将用户传入的索引转换为具体的块坐标
  • 匹配坐标对应的对称关系,找到内存中存储的唯一块
  • 应用酉变换、转置等操作生成目标块并返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:50