我正在寻找一种干净的方法将整数向量转换为二进制值的二维数组,其中的数组对应于作为索引的向量值
即
v = np.array([1, 5, 3])
C = np.zeros((v.shape[0], v.max()))
我正在寻找的是将C转换成这样的方法:
array([[ 1., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 1., 0., 0.]])
我想出了这个:
C[np.arange(v.shape[0]), v.T-1] = 1
但我想知道是否有更少的冗长/更优雅的方法?
谢谢!
UPDATE
感谢您的意见!我的代码中有一个错误:如果v中有0,则会将1放入错误的位置(最后一列).相反,我必须扩展分类数据以包括0.
只要你专门处理稀疏矩阵,jrennie的答案对于大型向量来说是一个巨大的胜利.在我的情况下,我需要返回一个数组的兼容性,转换完全平衡了优势 – 请参阅两个解决方案:
def permute_array(vector):
permut = np.zeros((vector.shape[0], vector.max()+1))
permut[np.arange(vector.shape[0]), vector] = 1
return permut
def permute_matrix(vector):
indptr = range(vector.shape[0]+1)
ones = np.ones(vector.shape[0])
permut = sparse.c