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)
不胜感激.
"我想通过不使用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级别的循环,所以即使对于大型数据集也应该快速.