我需要切片一个数组,除了第一个数据之外,我希望为每个维度假设零。
给定一个数组:
x = numpy.zeros((3,3,3))
我想要以下行为,但无需事先了解尺寸数量:
y = a[:,0,0]
基本上我正在寻找代替Ellipsis的东西,但它不会扩展到所需数量的:
个对象,而是会扩展为所需的零个数。
这有什么内置的吗?如果没有,获得我需要的功能的最佳方法是什么?
修改
一种方法是使用:
y = x.ravel(0:temp.shape[0])
这样可以正常工作,但在某些情况下(例如我的)ravel
需要创建数组的副本而不是视图。由于我正在使用大型数组,因此我想要一种更有效的内存方式。
答案 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]