我有一个由零组成的一维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或更大的数组。我确信这是一个相当简单的答案,但任何帮助都会受到赞赏。
答案 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的答案是最好的。我已经对它进行了投票,但我还没有足够的声誉:(