在n维数组中迭代地修改基于数组的索引元素

时间:2017-03-24 13:15:32

标签: python arrays multidimensional-array

我有一个基数组base = [0,1,2,3],其中包含集合{0,...,k}的元素(本例中k3)。我还有另一个数组modif,它是n维数组,其中nbase中不同元素的数量。

我想迭代地添加一个modif数组的元素,由base的索引给出,所以如果base = [0,1,2,3]函数必须将{1}添加到modif[0,1,2,3]

我尝试过像

这样的事情
probs[b for b in base] += 1

probs[(b for b in base)] += 1

甚至

for b in base:
    sel = probs[b]
sel += 1

但问题在于,在第一个和第二个中,它不是有效的语法,在第三个中,sel实际上是probs[b]的副本,而不是相同的实际对象,因此更改未完成在probs

1 个答案:

答案 0 :(得分:1)

您不需要理解只需将索引转换为元组。这是一个例子:

In [42]: a
Out[42]: 
array([[[ 2,  2,  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, 27, 28, 29]]])

In [43]: b
Out[43]: [0, 1, 2]

In [44]: a[tuple(b)]
Out[44]: 7

In [45]: a[tuple(b)] += 100

In [46]: a
Out[46]: 
array([[[  2,   2,   2,   3,   4],
        [  5,   6, 107,   8,   9],
        [ 10,  11,  12,  13,  14]],

       [[ 15,  16,  17,  18,  19],
        [ 20,  21,  22,  23,  24],
        [ 25,  26,  27,  28,  29]]])