我有这些载体:
a = [1,2,3,4]
b = [1,2,3,5]
我想在最后得到这个:
A = [ [1,0,0,0,0]
[0,1,0,0,0]
[0,0,1,0,0]
[0,0,0,1,0] ]
B = [ [1,0,0,0,0]
[0,1,0,0,0]
[0,0,1,0,0]
[0,0,0,0,1] ]
我一直在使用python中的np.reshape:
A = np.reshape(a,(1,4,1))
B = np.reshape(b,(1,4,1))
它只是部分工作,因为我有以下结果:
A = [[1]
[2]
[3]
[4]]
B = [[1]
[2]
[3]
[5]]
理想情况下,我想要这样的事情:
A = np.reshape(a,(1,4,(1,5))
但在阅读文档时,这是不可能的。
提前感谢您的帮助
答案 0 :(得分:3)
或者,numpy可以一次性为行/列上的多个索引赋值,例如:
In [1]: import numpy as np
In [2]: b = [1,2,3,5]
...:
...:
In [3]: zero = np.zeros([4,5])
In [4]: brow, bcol = range(len(b)), np.array(b) -1 # logical transform
In [5]: zero[brow, bcol] = 1
In [6]: zero
Out[6]:
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 0., 1.]])
答案 1 :(得分:1)
当您改变数据结构时,您尝试做的事情实际上并不是重塑。 创建一个具有所需形状的新数组:
A = np.zeros(myshape)
B = np.zeros(myshape)
然后索引那些数组
n = 0
for i_a, i_b in zip(a, b):
A[n, i_a - 1] = 1
B[n, i_b - 1] = 1
n += 1
赋值中的i_a/i_b - 1
仅用于将1个索引作为第0个元素。这仅在a
和b
具有相同长度时才有效。如果它们的长度不同,则进行这两个循环。
可能有一个更优雅的解决方案,但这应该完成工作:)