切片数组时,假设后续维度为零

时间:2013-01-11 03:18:48

标签: python numpy

我需要切片一个数组,除了第一个数据之外,我希望为每个维度假设零。

给定一个数组:

x = numpy.zeros((3,3,3))

我想要以下行为,但无需事先了解尺寸数量:

y = a[:,0,0]

基本上我正在寻找代替Ellipsis的东西,但它不会扩展到所需数量的:个对象,而是会扩展为所需的零个数。

这有什么内置的吗?如果没有,获得我需要的功能的最佳方法是什么?



修改
一种方法是使用:

y = x.ravel(0:temp.shape[0])

这样可以正常工作,但在某些情况下(例如我的)ravel需要创建数组的副本而不是视图。由于我正在使用大型数组,因此我想要一种更有效的内存方式。

2 个答案:

答案 0 :(得分:3)

你可以创建一个索引元组,如下所示:

x = arange(3*3*3).reshape(3,3,3)

s = (slice(None),) + (0,)*(x.ndim-1)

print x[s]  # array([ 0,  9, 18])
print x[:,0,0] # array([ 0,  9, 18])

我想你也可以这样做:

x.transpose().flat[:3]

但我更喜欢第一种方法,因为它适用于任何维度(而不仅仅是第一种),显然只需编写x[:,0,0]同样有效,因为它只是一种不同的语法。

答案 1 :(得分:0)

我通常使用tom10的方法,但这是另一种方法:

for i in range(x.ndim-1):
    x = x[...,0]