Python 如何对二维矩阵进行热编码?
我有一个巨大的numpy 2d数组,每个值都是介于0和3之间的类别: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
[[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)