我怎样才能为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.
答案 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