【问题标题】:How to access an element of a multidimensional array via a list of indices?如何通过索引列表访问多维数组的元素
【发布时间】:2020-01-15 18:17:23
【问题描述】:

我想通过定义的索引列表访问多维数组的特定元素(即张量)。假设我有一个 4 维数组“P”,索引列表“ind”定义为

 ind = [0,4,1,3]

它表征了它的元素之一。我想将“某物”分配给元素 P[0,4,1,3]。但是,当我这样做时

 P[ind] = "something"

Python 理解 P[[0,4,1,3]] 而不是 P[0,4,1,3]。

那么,我如何通过“ind”访问元素 P[0,4,1,3] ?

非常感谢您的帮助。

【问题讨论】:

    标签: python arrays multidimensional-array tensor indices


    【解决方案1】:

    更新答案

    要通过给定的索引列表设置 N 维列表中的值,可以使用以下 setter 函数:

    def set_val(ndim, ind, val):
        arr = ndim
        for i in ind[:-1]:
            arr = arr[i]
        arr[ind[-1]] = val
    
    # usage:
    P = [[[42]]]
    set_val(P, [0, 0, 0,], 9001)
    

    原答案

    要设置与普通 Python 列表的给定索引相对应的元素,您需要运行一个循环,如下所示:

    arr = [1, 2, 3, 4, 5, 6, 7, 8]
    ind = [0, 4, 1, 3]
    val = 42
    for i in ind:
        arr[i] = val
    

    Plain Python 不提供对列表的向量操作。您可能会将 Python 与 Pandas 混淆。

    【讨论】:

    • 您好伊万,谢谢您的回答。但是“ind”实际上只对应于多维数组的一个元素(我编辑了我的问题;我很抱歉,我认为它不够清楚)。
    • 那么,多维数组的实际类型是什么?它实际上可能支持一些特定的访问方法。但是如果我们需要访问一个普通 4d 列表的叶子元素,可以使用递归函数。
    • 这是一个 numpy.ndarray
    • 我不是 numpy 方面的专家,但您可以尝试设置像这样的值 P[np.array([0,4,1,3])] = 'something'
    • 您使用 set_val 定义的更新答案效果很好。非常感谢 ! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多