Python 如何对二维矩阵进行热编码?

Python 如何对二维矩阵进行热编码?,python,arrays,numpy,one-hot-encoding,Python,Arrays,Numpy,One Hot Encoding,我有一个巨大的numpy 2d数组,每个值都是介于0和3之间的类别: [[3 1 0 ... 1] ... [2 0 1 ... 3]] 我想对其进行一次热编码(0是0 0 0 1,1是0 0 1 0,等等),因此上述内容将变为: [[1 0 0 0 0 0 1 0 0 0 0 1 ... 0 0 1 0] ... [0 1 0 0 0 0 0 1 0 0 1 0 ... 1 0 0 0]] 最有效的方法是什么?谢谢 假设你有一个(M,N)矩阵,你的最大值是p(=4): 首先将其编码为0

我有一个巨大的numpy 2d数组,每个值都是介于0和3之间的类别:

[[3 1 0 ... 1]
...
 [2 0 1 ... 3]]
我想对其进行一次热编码(0是
0 0 0 1
,1是
0 0 1 0
,等等),因此上述内容将变为:

[[1 0 0 0 0 0 1 0 0 0 0 1 ... 0 0 1 0]
...
 [0 1 0 0 0 0 0 1 0 0 1 0 ... 1 0 0 0]]

最有效的方法是什么?谢谢

假设你有一个
(M,N)
矩阵,你的最大值是
p
=4
):

首先将其编码为0和1的
(M,N,p)
矩阵,使用
mat
作为最后一个维度的索引:

encoded = np.zeros((M, N, P), dtype=int)
encoded[(*np.ogrid[:M, :N], (P - 1) - mat)]
或者,使用
np。沿\u轴放置\u

np.put_along_axis(encoded, (P - 1) - np.expand_dims(mat, -1), 1, axis=-1)
数据在内存中的顺序与您想要的相同,因为numpy默认使用C顺序。您只需
重塑
即可获得最终结果:

encoded.reshape(M, N * P)

正确的解释是错误的。。。刚才看到转换后的数组是连接在一起的。
encoded.reshape(M, N * P)