为什么np.meshgrid生成的数组维度比输入参数更高?
原因说明
你遇到的输出和预期不一致的核心原因是:你直接对np.meshgrid的返回整体调用了np.shape,而np.meshgrid的返回值是由多个网格数组组成的列表,不是单个数组。
具体规则:
- 当你传入N个1D坐标数组给
np.meshgrid时,它会返回长度为N的列表,列表中的每个元素都是对应的坐标网格数组,每个网格数组的维度与你传入的坐标数量一致。 - 当你对Python列表调用
np.shape时,numpy会自动将列表转换为高维数组,第一维的长度就是列表的长度(也就是你传入的1D数组的个数),后续维度才是每个网格数组的形状。
第一个例子验证
你传入了3个1D数组:长度分别为5、4、3,使用indexing='ij'时,每个返回的网格数组形状都是你预期的(5,4,3)。
由于np.meshgrid返回了3个这样的数组组成的列表,你对整个列表求np.shape,就会得到(3, 5, 4, 3)的结果。
如果想得到你预期的输出,查看单个网格数组的形状即可:
print(np.shape(grid[0])) # 输出为 (5, 4, 3)
第二个例子验证
你传入了2个1D数组:长度分别为5、4,每个返回的网格数组形状都是你预期的(5,4)。
由于返回的列表长度为2,对整个列表求np.shape就会得到(2, 5, 4)的结果。
同样查看单个网格数组的形状即可得到预期输出:
print(np.shape(grid[0])) # 输出为 (5, 4)
内容的提问来源于stack exchange,提问作者henry
相关产品推荐
相关产品推荐

