python数组形状_python – numpy数组的形状

现在和numpy一起工作了一段时间.就在我认为我已经找到数组的时候,它又引发了另一条曲线.例如,我构建了3D数组pltz,然后

>>> gridset2 = range(0, pltx.shape[2], grdspc)

>>> pltz[10,:,gridset2].shape

(17, 160)

>>> pltz[10][:,gridset2].shape

(160, 17)

为什么地球上的两种形状不同?

解决方法:

由于索引表达式同时包含:和列表,因此NumPy需要应用基本索引规则和高级索引规则,并且它们的交互方式有点奇怪.相关文档是here,如果您想了解完整的详细信息,请查阅它.我将专注于导致这种形状不匹配的部分.

当使用高级索引的索引表达式的所有组件彼此相邻时,来自高级索引的结果的维度将放置到它们替换的维度的位置中的结果中.高级索引组件类似于数组,例如数组,列表和标量;标量也可用于基本索引,但为此目的,它们被认为是高级的.因此,如果arr.shape ==(10,20,30)和ind.shape =(2,3,4),那么

arr[:, ind, :].shape == (10, 2, 3, 4, 30)

你的第一个表达就属于这种情况.

另一方面,如果使用高级索引的索引表达式的组件由使用基本索引的组件分隔,则没有明确的位置来插入高级索引维.例如,用

arr[ind, :, ind]

结果需要有长度为2,3,4和20的尺寸,并且没有好地方可以粘住20.

当高级索引组件由基本索引组件分隔时,NumPy会粘贴结果数组开头的高级索引所产生的所有维度.基本索引组件是:,…和np.newaxis(无).你的第二个表达属于这种情况.

由于您的第二个表达式具有由基本索引组件分隔的高级索引组件,而您的第一个表达式没有,因此您的两个表达式使用不同的索引规则.为避免这种情况,您可以将基本索引和高级索引分为两个阶段,或者可以使用等效的高级索引替换基本索引.无论你做什么,我建议在这些代码上面加上解释性注释.

标签:python,arrays,numpy

来源: https://codeday.me/bug/20190928/1825977.html

你可能感兴趣的:(python数组形状)