如何将1-d数组重塑为形状数组(1,4,5)?

时间:2016-08-25 15:30:31

标签: python numpy reshape encoder

我有这些载体:

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

但在阅读文档时,这是不可能的。

提前感谢您的帮助

2 个答案:

答案 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个元素。这仅在ab具有相同长度时才有效。如果它们的长度不同,则进行这两个循环。 可能有一个更优雅的解决方案,但这应该完成工作:)