如何简化移除任意N维numpy meshgrid数组各维度的最后切片?
解决Numpy Meshgrid任意维度切片问题
不用写循环的话,可以用元组切片+列表推导式统一处理任意维度的网格切片需求,代码更简洁且高效:
核心思路
利用slice(None, -1)等价于:-1的特性,生成一个和网格维度数匹配的切片元组,一次性对所有维度应用:-1切片,再批量处理meshgrid生成的所有坐标数组。
示例代码
import numpy as np # 生成任意维度的网格(以3D为例,2D/ND同理) x = np.linspace(0, 1, 5) y = np.linspace(0, 1, 5) z = np.linspace(0, 1, 5) X = np.meshgrid(x, y, z, indexing='ij') # 生成适配维度的切片元组:每个维度都取:-1 slice_tuple = tuple(slice(None, -1) for _ in range(X[0].ndim)) # 批量处理所有网格数组 sliced_grids = [grid[slice_tuple] for grid in X]
说明
X[0].ndim自动获取网格的维度数,不管是2D还是N维都能适配- 列表推导式比显式循环更简洁,且numpy对切片操作的内部优化能保证效率
- 不管meshgrid用
indexing='ij'还是'xy',只要维度数正确,这个方法都有效
内容的提问来源于stack exchange,提问作者Fernando Chueca
相关产品推荐
相关产品推荐

