多维数组转onehot编码

目的:随机生成的三维数组中,shape如(2,4,10)中,找到10(axis=2)中最大的数的索引,生成2维的索引数组。

          将2维索引shape(2,4)中每个位置的值转成(2,4*10)的onehot编码。

        如[[1,2,3,4],[2,1,4,3]]中的   4转为0000100000   ;   1转成 0100000000


代码如下:

import numpy as np


char_set=10
max_captcha=4

a=np.random.random((2,4,10))
print(a)
max_idx_a = np.argmax(a,2)
print(max_idx_a)

#法一
#def id2vec(max_idx):
#     vector = np.zeros((2,max_captcha*char_set))
#     for i in range(len(max_idx)):
#          for j in range(len(max_idx[0])):  
#               idx =  j * char_set + max_idx[i][j]
#               vector[i][idx] = 1
#          print(i,j,idx)
#     return vector


#法二
def id2vec(max_idx):
     vector = np.zeros((2,max_captcha*char_set))       
     for j, c in enumerate(max_idx):   
          for i in range(len(max_idx[0])):
               idx =  i * char_set + c[i]
               vector[j][idx] = 1
          print(i,j,c)
     return vector

vec=id2vec(max_idx_a)
print(vec)

请勿随意转载,转载私信      

你可能感兴趣的:(tensorflow)