为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2022-12-20 12:12:06
我有一个多维 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 的方式来做我正在寻找的事情?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

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


查看完整回答
反对 回复 2022-12-20
?
慕沐林林

TA贡献2016条经验 获得超9个赞

这是Unpacking tuples/arrays/lists as indices for Numpy Arrays的副本,但您可以只创建一个元组

import numpy as np



def 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]: 13

my_array[indx]: 13


查看完整回答
反对 回复 2022-12-20
  • 2 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号