今天开始刷牛客上的python题目,遇到一道题。
import numpy as np
a = np.repeat(np.arange(5).reshape([1,-1]),10,axis = 0)+10.0 b = np.random.randint(5, size= a.shape)
c = np.argmin(a*b, axis=1)
b = np.zeros(a.shape)
b[np.arange(b.shape[0]), c] = 1
print b
以上函数输出结果为()
A.Hello World!
B.一个 shape = (5,10) 的随机整数矩阵
C.一个 shape = (5,10) 的 one-hot 矩阵
D.一个 shape = (10,5) 的 one-hot 矩阵
链接:https://www.nowcoder.com/questionTerminal/aec1e54446714c448c02bd91ce1c8807
用ipython 分步实现
#生成数组[0,1,2,3,4]
np.arange(5)
#原数组共有x个元素,reshape([n,-1])意思是将原数组重组为n行x/n列的新数组
#所以数组共有5个元素,重组为1行5列的数组
reshape([1,-1])
#因为axis=0,所以是沿着横轴方向重复,增加行数
#所以原数组增加10行
repeat(np.arange(5).reshape([1,-1]), 10, axis = 0)
#数组每个元素都+10
a = repeat(np.arange(5).reshape([1,-1]), 10, axis = 0) + 10
a*b组成的新数组,给出每行最小值的下标。
【one-hot的基本思想】
将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。
【这样做的好处主要有】
- 解决了分类器不好处理属性数据的问题
- 在一定程度上也起到了扩充特征的作用