在Python中将拆分为两列的优化方法 让我们考虑下面的NUMPLY NDAREY,

在Python中将拆分为两列的优化方法 让我们考虑下面的NUMPLY NDAREY,,python,numpy,Python,Numpy,我想让它变成两列,就像 A B 0 1 0 1 1 0 2 1 0 3 1 0 4 1 0 5 0 1 6 1 0 现在,我用下面的方法 a = [] b = [] for i in lb_results: if i == 0: a.append(1) b.append(0) else: a.append(0) b.

我想让它变成两列,就像

    A     B
0   1     0
1   1     0
2   1     0
3   1     0
4   1     0
5   0     1
6   1     0
现在,我用下面的方法

a = []
b = []
for i in lb_results:
    if i == 0:
        a.append(1)
        b.append(0)
    else:
        a.append(0)
        b.append(1)

lb_results = np.column_stack((a, b))
print(lb_results)
但我希望有更优化的方式,代码行数越少越好,而不需要使用更多的循环
任何建议都将不胜感激,谢谢。

您可以像这样使用xor:

>>> c = (np.c_[:7] == 5).astype(int)
>>> c
array([[0],
       [0],
       [0],
       [0],
       [0],
       [1],
       [0]])
>>> c ^ (1, 0)
array([[1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [0, 1],
       [1, 0]])
我想这是最短的了-


这背后的魔力是。简单地说,xor运算符^应用于列c的一个元素和1D序列1的一个元素之间的每一对,0导致这两个元素之间的完整xor表。

不需要任何循环,只需使用这些方法创建第二个1D数组,然后堆栈,您所做的就是翻转0和1s@roganjosh谢谢它也很好用。也许不必要的短。。。我建议np.column\u stacknp.logical\u notb,b@paul谢谢,我想,如果一旦我们不知道1的索引,也就是说,在你的例子中,它是'5'@JaiK,那么它对任何由1和0组成的列c都有效。第一行只是重新创建示例向量的快捷方式。请尝试一下:创建一个不同的c并执行c^1,0。@PaulPanzer是的,Paul。很好,工作很好。。对不起,我理解错了。
>>> c = (np.c_[:7] == 5).astype(int)
>>> c
array([[0],
       [0],
       [0],
       [0],
       [0],
       [1],
       [0]])
>>> c ^ (1, 0)
array([[1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [1, 0],
       [0, 1],
       [1, 0]])