【发布时间】:2020-01-10 02:56:44
【问题描述】:
我有一个长度为 L 的(一维)numpy 数组 a,其中填充了从 0 到 N-1 的数字。
现在,我想构建一个 NxL 矩阵,使得在每一列 c 中,a[c]第 1 个条目为 1,所有其他条目为 0。
例如,如果 L=4,N=5 并且
a = np.array([1,2,0,4])
那么我们需要一个矩阵
m = np.array([[0,0,1,0],
[1,0,0,0],
[0,1,0,0],
[0,0,0,0],
[0,0,0,1]])
现在,我有以下代码:
def vectorize(a, L, N):
m = np.zeros((N, L))
for (i,x) in enumerate(a):
m[x][i] = 1.0
return m
这很好用,但我确信有一个更快的方法使用一些 numpy 技巧(避免循环 a)。
【问题讨论】:
-
第二个链接副本是一个很好的单热编码资源,我认为
np.eye(a.max()+1)[a]是一种干净的方法
标签: python arrays numpy matrix vectorization