Python:根据另一个数组生成一个包含更多列的新数组

时间:2017-10-16 21:54:11

标签: python arrays numpy

我有这个数组:
enter image description here

我需要像这样创建一个新数组:
enter image description here

我想我需要使用条件,但我不知道如何根据5列数组的值创建一个包含7列的数组。

如果有人可以帮助我,我感谢!

2 个答案:

答案 0 :(得分:1)

我将假设你想将你的最后一列转换为一个热调节,然后将它连接到你的原始数组。您可以初始化零数组,然后将适当的索引设置为1。最后将OHE阵列连接到原始阵列。

MCVE:

print(arr)  
array([[ -9.95,  15.27,   9.08,   1.  ],
       [ -6.81,  11.87,   8.38,   2.  ],
       [ -3.02,  11.08,  -8.5 ,   1.  ],
       [ -5.73,  -2.29,  -2.09,   2.  ],
       [ -7.01,  -0.9 ,  12.91,   2.  ],
       [-11.64, -10.3 ,   2.09,   2.  ],
       [ 17.85,  13.7 ,   2.14,   0.  ],
       [  6.34,  -9.49,  -8.05,   2.  ],
       [ 18.62,  -9.43,  -1.02,   1.  ],
       [ -2.15, -23.65, -13.03,   1.  ]])

c = arr[:, -1].astype(int)    
ohe = np.zeros((c.shape[0], c.max() + 1))
ohe[np.arange(c.shape[0]), c] = 1   

arr = np.hstack((arr[:, :-1], ohe))

print(arr)
array([[ -9.95,  15.27,   9.08,   0.  ,   1.  ,   0.  ],
       [ -6.81,  11.87,   8.38,   0.  ,   0.  ,   1.  ],
       [ -3.02,  11.08,  -8.5 ,   0.  ,   1.  ,   0.  ],
       [ -5.73,  -2.29,  -2.09,   0.  ,   0.  ,   1.  ],
       [ -7.01,  -0.9 ,  12.91,   0.  ,   0.  ,   1.  ],
       [-11.64, -10.3 ,   2.09,   0.  ,   0.  ,   1.  ],
       [ 17.85,  13.7 ,   2.14,   1.  ,   0.  ,   0.  ],
       [  6.34,  -9.49,  -8.05,   0.  ,   0.  ,   1.  ],
       [ 18.62,  -9.43,  -1.02,   0.  ,   1.  ,   0.  ],
       [ -2.15, -23.65, -13.03,   0.  ,   1.  ,   0.  ]])

答案 1 :(得分:1)

使用np.eye技巧的@COLDSPEED的单行版本:

np.hstack([arr[:,:-1], np.eye(arr[:,-1].astype(int).max() + 1)[arr[:,-1].astype(int)]])