如果不为零,则在ndarray中为每个元素添加1

时间:2014-11-14 18:09:51

标签: python numpy

Python noobie here :)试图弄清楚如何简洁地做事。

>>> f = np.zeros((2,2), dtype=int)
>>> f[0][1] = 100
>>> f[1][0] = 200
>>> print f

[[  0 100]
 [200   0]]

>>> f1 = # do something special
>>> print f1

[[  0 101]
 [201   0]]

谢谢!

2 个答案:

答案 0 :(得分:6)

稍微好一点的方法是使用boolean indexing

>>> import numpy as np
>>> a = np.array([[0,100],[200,0]])
>>> a[a!=0] += 1
>>> a
array([[  0, 101],
       [201,   0]])

Matlab论坛很好地解释了它改进的原因,其中find扮演与np.where类似的角色。例如,在this Matlab thread中提到使用布尔数组调用findfind然后执行一些额外的功能来提取索引。然后使用这些索引在numpy中执行所谓的“花式索引”。但是,数组本身可以使用布尔数组以这种奇特的方式编入索引。

答案 1 :(得分:4)

您可以使用numpy.where找出值不为0的位置,然后将1添加到所有这些值。

>>> a = np.array([[0,100],[200,0]])
>>> a
array([[  0, 100],
       [200,   0]])

>>> a[np.where(a != 0)] += 1
>>> a
array([[  0, 101],
       [201,   0]])