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

时间:2014-11-12 15:25:25

标签: python arrays numpy

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

array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

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

array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

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

6 个答案:

答案 0 :(得分:58)

你的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]: 

答案 1 :(得分:10)

您应该使用布尔数据类型

的标志
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)

答案 2 :(得分:4)

从数学上讲,首先想到的是(value + 1) % 2

>>> (a+1)%2
array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)

答案 3 :(得分:2)

answer = numpy.ones_like(a) - a

答案 4 :(得分:1)

另一个多余的选择:

numpy.logical_not(a).astype(int)

答案 5 :(得分:0)

我也找到了一种方法:

<xsl:for-each select="service">
    <xsl:if test="servtypes='Service 3'">
        <fo:table-row>
        <fo:table-cell padding-top="2pt" padding-left="14pt" padding-bottom="2pt" display-align="center">
            <fo:block>
                Amount
            </fo:block>
        </fo:table-cell>
        <fo:table-cell padding-top="2pt" text-align="left" padding-bottom="2pt">
        <fo:block>
            <xsl:value-of select="servamt"/>
        </fo:block>
        </fo:table-cell>
        <fo:table-cell padding-top="2pt" padding-left="14pt" padding-bottom="2pt" display-align="center">
        <fo:block><fo:leader/></fo:block>
        </fo:table-cell>
        </fo:table-row>
    </xsl:if>
</xsl:for-each>

尽管如此,我认为@ gboffi的答案是最好的。我已经对它进行了投票,但我还没有足够的声誉:(