转换1D列表

Bry*_*ind -1 python arrays numpy transform list

我是python的新手,我需要将数字列表(0,1,2,3)转换为2D数组.基本上,它们都具有相同的行号,但是1D列表中的值表示它是2D数组中的列号.2D列表中的值标记为1.例如,样本1D列表

list_1d = [1,0,3,2,0]

1
0
3
2
0
Run Code Online (Sandbox Code Playgroud)

我需要它转换成,

0 1 0 0
1 0 0 0
0 0 1 0
0 1 0 0
1 0 0 0
Run Code Online (Sandbox Code Playgroud)

我创建了一个零的二维数组,

array_2d = np.zeros((len(list_1d),4))
Run Code Online (Sandbox Code Playgroud)

不胜感激.

Joh*_*024 5

"我想通过不使用for循环来优化代码,因为我的列表有数百万个元素."

在这种情况下,使用numpy:

>>> list_1d = [1,0,3,2,0]
>>> mat = np.zeros((len(list_1d),4))
>>> mat[range(len(list_1d)), list_1d] = 1
>>> mat
array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.],
       [ 0.,  0.,  1.,  0.],
       [ 1.,  0.,  0.,  0.]])
Run Code Online (Sandbox Code Playgroud)

因为这种方法避免了在python级别的循环,所以即使对于大型数据集也应该快速.