向除2D阵列中的索引之外的所有索引添加值

时间:2018-02-15 16:25:42

标签: python numpy

我怎样才能为numpy数组a中的所有索引添加一个值,除了 不必制作掩码?请注意,我想要反转a[0,0]索引的操作,因为在我的用例中,+=右侧的操作无法在0,0执行{1}}索引。

import numpy as np

a = np.random.rand(10, 10)

# The 0,0 index is incremented with 1.
a[0,0] += 1.

# I would like to increment all others with three += 3.

4 个答案:

答案 0 :(得分:2)

只需在整个数组中加3,然后从所选元素中减去2:

a += 3
a[0, 0] -= 2

答案 1 :(得分:2)

这也应该可以使用view(),例如:

import numpy as np

a = np.random.rand(3, 3)

# The 0,0 index is incremented with 1.
a[0,0] += 1.

# I would like to increment all others with three += 3.
b = a.view()
b.shape = a.size
b[1:] += 3.

结果:

In [12]: a
Out[12]: 
array([[ 1.06170829,  3.61834092,  3.24390753],
       [ 3.38696962,  3.5801084 ,  3.73288544],
       [ 3.67263889,  3.89885429,  3.3103394 ]])

可能有一种较短的写入方式,但根据documentation,此方法可确保在进行重新整形时不会复制数据(否则会引发错误):

  

在不复制数据的情况下,无法始终更改阵列的形状。如果要在复制数据时引发错误,则应将新形状分配给数组的shape属性

答案 2 :(得分:1)

也许

a[0,0] += 1
a[0,1:] += 3
a[1:,0] += 3
a[1:,1:] += 3

更新:对索引(i,j)进行推广:

a[i,j] += 1
a[:i,:] += 3
a[i+1:,:] += 3
a[i,:j] += 3
a[i,j+1:] += 3

答案 3 :(得分:1)

这应该有效:

在第一行之后添加到所有内容:

a[1:] += 1

在第一行中添加除第一个元素

之外的所有内容
a[0,1:] += 1

一般i,j元素

def add_to_all_except(i, j, array, value):

    array[:i] += value
    array[i + 1:] += value

    # add column-wise on
    array[i,:j] += value
    array[i,j+1:] += value