Numpy切片的任意尺寸

时间:2012-08-24 21:21:43

标签: python numpy

我想切片一个numpy数组来获取最后一个维度中的第i个索引。对于3D数组,这将是:

slice = myarray[:,:,i]

但我正在编写一个函数,我可以在其中获取任意维度的数组,因此对于4D数组,我需要myarray[:,:,:,i],依此类推。有没有办法可以为任何数组获取此切片而无需显式写入数组维度?

3 个答案:

答案 0 :(得分:60)

...Ellipsis,其确实如此:

slice = myarray[..., i]

省略号是python对象,如果你想在方括号表示法之外使用它。

答案 1 :(得分:10)

实际上,刚刚找到答案。如numpy's documentation中所述,这可以使用切片对象完成。在我的特定情况下,这样做:

idx = [slice(None)] * (myarray.ndim - 1) + [i] 
my_slice = myarray[idx]

slice(None)相当于选择该索引中的所有元素,而最后一个[i]选择最后一个维度的特定索引。

答案 2 :(得分:3)

就切片任意维度而言,之前的优秀答案可以扩展到:

indx = [Ellipsis]*myarray.ndim
indx[slice_dim] = i
slice = myarray[indx]

这会返回任意维度slice_dim的切片 - slice_dim = -1再现先前的答案。 为了完整性 - 上面列表的前两行可以压缩为:

indx = [Ellipsis]*(slice_dim) + [i] + [Ellipsis]*(myarray.ndim-slice_dim-1)

虽然我发现以前的版本更具可读性。

相关问题