在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]])