python中numpy多维数组的非相邻切片

2024-09-30 20:20:39 发布

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

我有一个多维数组a:

a = np.random.uniform(1,10,(2,4,2,3,10,10))

对于维度4-6,我有3个列表,其中包含对数组“a”的维度进行切片的索引

^{pr2}$

如何将数组“a”切片以获得:

b = a[0,:,0,dim4,dim5,dim6]

所以b应该是一个具有形状(4,2,3,4)的数组,并且包含a的相应维度的元素。当我尝试上面的代码时,我得到一个错误消息,说不同的形状不能一起广播到轴4-6,但是如果我要这样做:

b = a[0,:,0:2,0:3,0:4]

尽管切片列表的长度各不相同,但它确实有效。那么如何使用非相邻索引对多维数组进行切片呢?在


Tags: 代码消息元素列表错误np切片random
1条回答
网友
1楼 · 发布于 2024-09-30 20:20:39

您可以使用numpy.ix_函数来构造像这样的复杂索引。它获取一个array_like序列,并从中生成一个“开放网格”。docstring中的示例非常清楚:

Using ix_ one can quickly construct index arrays that will index the cross product. a[np.ix_([1,3],[2,5])] returns the array [[a[1,2] a[1,5]], [a[3,2] a[3,5]]].

因此,对于您的数据,您应该:

>>> indices = np.ix_((0,), np.arange(a.shape[1]), (0,), dim4, dim5, dim6)
>>> a[indices].shape
(1, 4, 1, 2, 3, 4)

使用np.squeeze删除size-1维度:

^{pr2}$

相关问题 更多 >