本节书摘来自异步社区《Python数据分析》一书中的第2章,第2.8节,作者【印尼】Ivan Idris,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.8 花式索引
花式索引是一种传统的索引方法,它不使用整数或者切片。这里,我们将利用花式索引把莱娜照片对角线上的值全部置0,相当于沿着两条交叉的对角线画两条黑线。
为节约版面,下面代码中的注释已经删除,完整的代码请参考本书代码包中的fancy.py文件:
import scipy.misc
import matplotlib.pyplot as plt
lena = scipy.misc.lena()
xmax = lena.shape[0]
ymax = lena.shape[1]
lena[range(xmax), range(ymax)] = 0
lena[range(xmax-1,-1,-1), range(ymax)] = 0
plt.imshow(lena)
plt.show()
下面对上述代码进行简单说明。
1.将第一条对角线上的值设为0。
为了给对角线上的值置0,需要给x和y值(直角坐标系中的坐标)规定两个不同的范围:
lena[range(xmax), range(ymax)] = 0
2.将另一条对角线上的值设为0。
要设置另一条对角线上的值,需要规定两个不同的取值范围,但是规则不变:
lena[range(xmax-1,-1,-1), range(ymax)] = 0
划掉相片对角线后,最后得到图2-5所示的效果。
我们给x和y规定了不同的取值范围,这些范围用来索引莱娜数组。花式索引是在一个内部的NumPy迭代器对象的基础上实现的,分3步完成。
(1)创建迭代器对象。
(2)将迭代器对象绑定到数组。
(3)经由迭代器访问数组元素,利用位置列表进行索引。