在一维NumPy数组中翻转零和一

kyl*_*tor 23 python arrays numpy

我有一个由零组成的一维NumPy数组,如下所示:

array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
Run Code Online (Sandbox Code Playgroud)

我想快速"翻转"这些值,使得零变为1,并且变为零,从而产生如下的NumPy数组:

array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)

这有一个简单的单行程吗?我查看了该fliplr()函数,但这似乎需要NumPy维数为2或更大的数组.我确信这是一个相当简单的答案,但任何帮助都会受到赞赏.

gbo*_*ffi 68

你的Q中肯定有一些我不明白的东西......

无论如何

In [2]: from numpy import array

In [3]: a = array((1,0,0,1,1,0,0))

In [4]: b = 1-a

In [5]: print a ; print b
[1 0 0 1 1 0 0]
[0 1 1 0 0 1 1]

In [6]: 
Run Code Online (Sandbox Code Playgroud)

  • 确实很好很简单,+ 1.唯一可能的问题是,就地不容易做到.正因为如此,我更喜欢使用按位XOR,`a = a ^ 1`,这可以让你做'a ^ = 1`. (4认同)
  • 这应该是公认的答案.这是最简单的解决方案 (3认同)

YXD*_*YXD 11

您可能应该使用布尔数据类型的标志

a = np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=np.bool)
# or
b = ~a
b = np.logical_not(a)
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢解决问题而不是问题的答案. (3认同)

Joh*_*all 6

另一个多余的选择:

numpy.logical_not(a).astype(int)
Run Code Online (Sandbox Code Playgroud)