7

说我有

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

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

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

我如何产生这个矩阵?我从

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

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

一如既往,感谢您的宝贵时间!

4

3 回答 3

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.]])
于 2013-09-23T21:01:57.720 回答
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)
于 2013-09-23T21:21:40.143 回答
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

我认为......我认为没有更简单的方法(但我可能错了)

于 2013-09-23T20:59:30.800 回答