为什么np.meshgrid会将输入的(x,y,z)顺序变为(y,x,z)?
索引顺序颠倒的原因
np.meshgrid 默认采用笛卡尔坐标('xy')索引模式,传入的输入数组顺序和输出数组的前两维顺序是反过来的:
- 你传入参数的顺序为
(u, v, w),其中u对应x轴(最终输出数组的第二维,索引位置1),v对应y轴(最终输出数组的第一维,索引位置0),第三维w对应索引位置2保持不变。 - 生成的
func1数组维度为(v的长度, u的长度, w的长度) = (3, 4, 2),因此要取u[3] + v[2] + w[1]的结果时,需要写成func1[2, 3, 1]才能得到321。
如果希望输出数组的维度顺序和输入数组顺序完全对应,即(u长度, v长度, w长度) = (4, 3, 2),可以给meshgrid添加indexing='ij'参数,切换为矩阵索引模式:
x, y, z = np.meshgrid(u, v, w, indexing='ij') func1 = x + y + z # 此时 func1[3, 2, 1] 即可返回321,符合预期
是否需要改用np.ix_
纯运算场景下更推荐使用np.ix_,原因如下:
np.ix_专门用于生成广播运算所需的索引网格,默认维度顺序和输入数组的顺序完全一致,不需要记忆索引参数的差异,不容易出错:
xu, xv, xw = np.ix_(u, v, w) func2 = xu + xv + xw # 此时 func2[3, 2, 1] 直接返回321
np.meshgrid更适合用于绘图、坐标变换等需要生成标准笛卡尔网格的场景,如果仅做元素级的广播求和,np.ix_的写法更轻量直观。
内容的提问来源于stack exchange,提问作者Danilo Castioni Maia
相关产品推荐
相关产品推荐

