Numpy array:如何将2D array的值转换为3D one-hot array



我有一个形状为(1000,20)的numpy 2D数组'ya',其中每个单元格的值在0到5之间。我想创建一个形状为(1000,6,20)的3D数组yb,我用np创建它。0((1000,6,20)),其中dim(1)中的单元格将在对应ya值的列中取值1。

的例子:Ya [125,12] = 4 and Ya [248,7] = 1

=比;Yb [125,4,12] = 1 and Yb [248,1,7] = 1

和yb[125, i!]的所有其他细胞= 4,12] and of [248, i!]=1, 7] = 0

有没有一种不用循环的好方法?我希望我的问题足够清楚……: -)

提前谢谢你。

将一维数组扩展为二维数组且值在0到2之间的简化示例:

a = ([0,2,1,1,0])

yb = ((1,0,0) [0, 0, 1], (0,1,0) (0,1,0), (1,0,0))

基本思想是在数组的新维度上用0或1替换值。

尝试广播:

(a[:,None,:] == np.arange(6)[None,:,None]).astype(int)

样本数据:

np.random.seed(1)
m,n=3,4
a = np.random.randint(0,6, (m,n))

输出:

array([[[0, 0, 0, 1],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[1, 0, 0, 0]],
[[0, 0, 0, 1],
[1, 0, 0, 0],
[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 0],
[0, 0, 1, 0]],
[[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]])

最新更新