1

我需要对一个数组进行切片,我希望除第一个维度之外的每个维度都假设为零。

给定一个数组:

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

我想要以下行为,但不需要事先知道维度的数量:

y = a[:,0,0]

本质上,我正在寻找可以代替Ellipsis的东西,但不是扩展到所需的:对象数量,而是扩展到所需的零数量。

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



编辑:
一种方法是使用:

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

这很好用,但是在某些情况下(例如我的)ravel将需要创建数组的副本而不是视图。由于我正在处理大型数组,因此我想要一种更高效的内存方式。

4

2 回答 2

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],因为它只是一种不同的语法。

于 2013-01-11T03:59:44.357 回答
0

我通常使用tom10的方法,但这里有另一个:

for i in range(x.ndim-1):
    x = x[...,0]
于 2013-01-11T19:01:18.693 回答