说我有
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))
然后无法弄清楚如何填充/填写索引列表中的那些
一如既往,谢谢你的时间!
答案 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
我想......我不认为有一种更简单的方法(但我可能错了)