从一维数组的索引和值构造二维numpy数组

时间:2013-09-23 20:53:24

标签: python numpy

说我有

Y = np.array([2, 0, 1, 1])

由此我想获得一个形状为(len(Y), 3)的矩阵X.在这种特殊情况下,X的第一行应该在第二个索引上有一个,而在其他情况下为零。 X的第二行应该在0索引上有一个,否则为零。要明确:

X = np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 1, 0]])

如何制作这个矩阵? 我从

开始
X = np.zeros((Y.shape[0], 3))

然后无法弄清楚如何填充/填写索引列表中的那些

一如既往,谢谢你的时间!

3 个答案:

答案 0 :(得分:13)

也许:

>>> Y = np.array([2, 0, 1, 1])
>>> X = np.zeros((len(Y), 3))
>>> X[np.arange(len(Y)), Y] = 1
>>> X
array([[ 0.,  0.,  1.],
       [ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.]])

答案 1 :(得分:3)

为DSM提供一个单行代替的完美答案:

>>> Y = np.array([2, 0, 1, 1])
>>> np.arange(3) == Y[:, np.newaxis]
array([[False, False,  True],
       [ True, False, False],
       [False,  True, False],
       [False,  True, False]], dtype=bool)

答案 2 :(得分:1)

Y = np.array([2, 0, 1, 1])
new_array = np.zeros((len(Y),3))
for i in range(len(Y)):
    new_array[i,Y[i]] = 1

我想......我不认为有一种更简单的方法(但我可能错了)