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

2024-04-25 08:25:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要切片一个数组,在这里除了第一个维度之外,我希望每个维度都假设为零。你知道吗

给定一个数组:

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

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

y = a[:,0,0]

从本质上说,我在寻找一些可以取代Ellipsis的东西,但是它没有扩展到所需数量的:对象,而是扩展到所需数量的零。你知道吗

这里面有什么东西吗?如果没有,那么获得所需功能的最佳方法是什么?你知道吗



编辑:
一种方法是使用:

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

这很好,但是在某些情况下(比如我的情况)ravel需要创建数组的副本而不是视图。因为我使用的是大型数组,所以我需要一种内存效率更高的方法。你知道吗


Tags: 对象方法功能numpy编辑数量zeros情况
2条回答

我通常使用tom10的方法,但还有一个:

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

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

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]同样有效,因为它只是一种不同的语法。你知道吗

相关问题 更多 >