我想指定一个数组的轴及其索引值,然后返回子数组

时间:2018-02-21 00:43:23

标签: python numpy indexing slice

所以我知道如何根据具体情况这样做,但我想写一个类和方法,或者有一个代码片段来执行此操作。例如,通常提取子数组我会这样做:

my_array = np.array(range(81)).reshape((3,3,3,3))
sub_array = my_array[0, 1, :, 0]

将返回向量或1D数组。我想一般列出哪些轴有索引值,然后将它们提供给数组(可能通过新的类方法)并返回子数组。例如对于上述:

axis_list = [0, 1, 3]
axis_idx_value = [0, 1, 0]

或压缩axes_idx_values = [(0,0), (1, 1), (3, 0)],理想情况下以某种广播方式或其他已经存在的令人难以置信的光滑numpy语法使用它们。我试着环顾四周,但我还没有找到任何内置的东西,而且我对如何首先调用特定(或多个)轴然后为其分配索引值感到茫然。任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

my_array[(0, 1, slice(None), 0)]

也可以写成

idx = (0, 1, slice(None), 0)
my_array[idx]

idx

所以你可以从你的

构建axis_list = [0, 1, 3] axis_idx_value = [0, 1, 0]
tuple

一些带有轴参数的numpy函数构造了这样的索引元组。有些可以从正确大小的列表或数组开始,填写值,然后将其转换为idx以进行索引。

无论如何,构建这样的In [8]: idx = np.full((4,),slice(None)) In [9]: idx[axis_list] = axis_idx_value In [10]: tuple(idx) Out[10]: (0, 1, slice(None, None, None), 0) In [11]: my_array = np.array(range(81)).reshape((3,3,3,3)) In [12]: my_array[Out[10]] Out[12]: array([ 9, 12, 15]) 元组是直接的Python,即使它看起来有点乱。你可以隐藏一个功能中的混乱。

{{1}}