Abstract:numpy入门实战教程进阶篇,附代码。
1.广播法则(BROADCAST RULE)
广播法则能使通用函数有意义地处理不具有相同形状的输入。
第一法则:若所有的输入数组维度不都相同,一个“1”将被重复地添加在维度较小的数组上直至所有数据都拥有相同的维度
第二法则:确定长度为1的数组沿着特殊方向表现地好像它有沿着那个方向最大形状的大小。对数组来说,沿着那个维度的数组元素的值理应相同。
应用广播法则后,所有数组的大小必须匹配。
2.花哨的索引和索引技巧
numpy比普通的python序列提供更多的索引功能。数组的索引功能:索引整数、切片、被整数数组和布尔数组索引。
2.1 通过数组索引(INDEXED BY ARRAY)
# indexed via array a = arange(12)**2 print a i = array([1,1,3,8,5]) print i print a[i] # # the elements of a at the positions i j = array([[3,4],[9,7]]) print a[j] # 当被索引数组a是多维的时,每一个唯一的索引数列指向a的第一维5。 # 以下示例通过将图片标签用调色版转换成色彩图像展示了这种行为 palette = array([ [0,0,0], [255,0,0], [0,255,0], [0,0,255], [255,0,255], [255,255,255]]) image = array([[0,1,2,0], [0,3,4,0]]) print palette[image] # 我们也可以给出不不止一维的索引,每一维的索引数组必须有相同的形状 a = arange(12).reshape(3,4) print a i = array([ [0,1], [1,2]]) j = array([[2,1],[3,3]]) print a[i,j] print a[i,2] print a[:,j] print a[i,:] l = [i,j] print a[l] # 与 a[i,j] 相等 # 搜索时间序列最大值6 time = linspace(20, 145, 5) # time scale data = sin(arange(20)).reshape(5,4) # 4 time-dependent series print time print data ind = data.argmax(axis=0) # index of the maxima for each series print ind time_max = time[ind] data_max = data[ind, range(data.shape[1])] print time_max print data_max print all(data_max == data.max(axis=0)) # True a = arange(5) print a # 当一个索引列表包含重复时,赋值被多次完成,保留最后的值 a = arange(5) a[[0,0,2]] = [1,2,3] print a