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
该代码输出的结果是一个shape=(10,5)的one-hot(热码)矩阵
解析:
a= np.repeat(np.arange(5).reshape([1,-1]),10,axis=0)+10.0
[[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]
[10. 11. 12. 13. 14.]]
arange和range的区别就是arange是numpy库的函数,需要先调入numpy库才能使用,range是python内置库的函数可以直接调用。
np.arange(5)生成数组[0,1,2,3,4]
reshape([n,-1])将原数组重组为n行,x/n列的数组
axis=0沿着横轴方向重复,增加行数
b=np.random.randint(5,size=a.shape) #随机生成一个大小为a.shape,数组元素为[0,5)整数的数组
[[1 2 3 3 0]
[0 1 0 4 1]
[1 0 2 0 2]
[2 3 1 2 3]
[3 3 3 4 3]
[4 2 2 0 4]
[1 3 1 0 4]
[3 0 2 1 3]
[0 2 1 1 4]
[1 1 4 4 1]]
c=np.argmin(a*b,axis=1) #给出a*b后的每行的最小值
print(a*b)
[[20. 44. 36. 52. 0.]
[30. 11. 36. 39. 42.]
[20. 0. 12. 52. 42.]
[30. 11. 12. 13. 28.]
[ 0. 33. 0. 39. 0.]
[10. 33. 24. 13. 42.]
[10. 22. 24. 26. 14.]
[ 0. 44. 0. 26. 0.]
[10. 0. 12. 13. 0.]
[30. 22. 48. 0. 42.]]
print(c)
[4 1 1 1 0 0 0 0 1 3] # 从0开始计算 第0行最小值0.在第四位,第一行最小值第一位……以此类推
b=np.zeros(a.shape) #生成一个大小为a.shape的全零数组
b[np.arange(b.shape[0]),c]=1 #b.shape[0]表示的是b的行数,给对应的位置赋值为1
[[1. 0. 0. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 1. 0. 0. 0.]
[1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]]