如何基于张量形状优雅生成带不同新增轴的np.arange序列列表
实现方案
下面给出两种简洁高效的实现方式,都能适配任意维度的输入张量t:
1. 列表推导式实现(完全匹配自定义逻辑)
直接通过索引位插入指定数量的新轴(None等价于np.newaxis),一行即可完成构造:
import numpy as np # 示例输入张量 t = np.random.rand(2, 3, 4) # 核心实现 result = tuple(np.arange(s)[(...,) + (None,) * (len(t.shape) - 1 - idx)] for idx, s in enumerate(t.shape))
逻辑说明:(...,) 指代np.arange生成的一维数组的原有轴,后面拼接对应数量的None实现右轴拓展,拓展轴的数量随索引逐次递减,完全符合需求。
2. Numpy原生接口实现(更简洁,性能更优)
可以直接用np.ogrid(开放网格生成接口)直接生成符合广播要求的坐标元组,逻辑更简洁:
result = tuple(np.ogrid[[slice(0, s) for s in t.shape]])
该方法返回的结果和示例输出完全一致,且是numpy原生优化的实现,处理高维张量时效率更高。
内容的提问来源于stack exchange,提问作者Sam-gege
相关产品推荐
相关产品推荐

