猿问

使用数组定义多维 numpy 数组的索引

我有一个多维 Numpy 数组;假设它是


 myArray = array([[[ 0,  1,  2],

                   [ 3,  4,  5],

                   [ 6,  7,  8]],


                  [[ 9, 10, 11],

                   [12, 13, 14],

                   [15, 16, 17]],


                  [[18, 19, 20],

                   [21, 22, 23],

                   [24, 25, 26]]])

我知道运行myArray[1,1,1],例如,将返回 13。但是,我想定义indx = [1,1,1]then call something to the effect of myArray[indx]。但是,这会做一些其他的多维索引工作。


我也尝试过myArray[*indx],但可以理解的是,这会引发语法错误。


目前我非常丑陋的解决方法是定义


def array_as_indices(array, matrix):

    st = ''

    for i in array:

        st += '%s,' % i

    st = st[:-1]


    return matrix[eval(st)]

它有效但非常不优雅并且可能很慢。


是否有更 pythonic 的方式来做我正在寻找的事情?


德玛西亚99
浏览 138回答 2
2回答

HUX布斯

numpy 数组的索引由元组而不是列表寻址。使用indx = (1, 1, 1)。作为扩展,如果你想调用索引 (1, 1, 1) 和 (2, 2, 2),你可以使用>>> indx = ([1, 2], [1, 2], [1, 2])>>> x[indx]array([13, 26])列表行为背后的基本原理是 numpy 按顺序处理列表,所以>>> indx = [1, 1, 1]>>> x[indx]array([[[ 9, 10, 11],        [12, 13, 14],        [15, 16, 17]],       [[ 9, 10, 11],        [12, 13, 14],        [15, 16, 17]],       [[ 9, 10, 11],        [12, 13, 14],        [15, 16, 17]]])它返回一个包含三个元素的列表,每个元素都等于 x[1]。

慕沐林林

这是Unpacking tuples/arrays/lists as indices for Numpy Arrays的副本,但您可以只创建一个元组import numpy as npdef main():    my_array = np.array(        [            [[0, 1, 2], [3, 4, 5], [6, 7, 8]],            [[9, 10, 11], [12, 13, 14], [15, 16, 17]],            [[18, 19, 20], [21, 22, 23], [24, 25, 26]],        ]    )    print(f"my_array[1,1,1]: {my_array[1,1,1]}")    indx = (1, 1, 1)    print(f"my_array[indx]: {my_array[indx]}")if __name__ == "__main__":    main()会给my_array[1,1,1]: 13my_array[indx]: 13
随时随地看视频慕课网APP

相关分类

Python
我要回答