【问题标题】:I want to specify an array's axes and their index values and get the sub array back我想指定一个数组的轴及其索引值并取回子数组
【发布时间】:2018-07-31 11:30:39
【问题描述】:

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

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

这将返回一个向量或一维数组。我一般想有一个我有索引值的轴的列表,然后将它们提供给数组(可能通过一个新的类方法)并取回子数组。例如以上:

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

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

【问题讨论】:

    标签: python numpy indexing slice


    【解决方案1】:
    my_array[0, 1, :, 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]
    

    一些带有轴参数的numpy函数构造了这样一个索引元组。有些可能会从一个大小合适的列表或数组开始,填写值,然后将其转换为tuple 以用于索引目的。

    无论如何,构造这样一个idx 元组是直接的Python,即使它看起来有点乱。您可以在函数中隐藏混乱。


    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])
    

    【讨论】:

    • 这正是我正在寻找的类型。我一直对自己说“我只想要一个合法的占位符,但我不能使用':'......就像一个切片对象......” 低,看哪。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2016-01-29
    • 2015-03-31
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多