所以我知道如何根据具体情况这样做,但我想写一个类和方法,或者有一个代码片段来执行此操作。例如,通常提取子数组我会这样做:
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语法使用它们。我试着环顾四周,但我还没有找到任何内置的东西,而且我对如何首先调用特定(或多个)轴然后为其分配索引值感到茫然。任何帮助将不胜感激,谢谢。
答案 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}}