布尔型索引就是基于布尔数组的索引,属于高级索引技术的范畴。
具体步骤
我们将把这种索引技术应用到图像处理过程。
- 在图像上添加点状的对角线。
这个步骤和高级索引画对角线的过程有点类似,只不过这次我们选取的是图像对角线上能被4整除的索引值对应的点。
def get_indices(size):
arr = numpy.arange(size)
return arr % 4 == 0
然后应用这个选择,并画出这些点。
lena1 = lena.copy()
xindices = get_indices(lena.shape[0])
yindices = get_indices(lena.shape[1])
lena1[xindices, yindices] = 0
matplotlib.pyplot.subplot(211)
matplotlib.pyplot.imshow(lena1)
- 把指定范围内的数值置零。
把数组中大小介于最大值的四分之一和最大值的四分之三之间的数值置零。
lena2[(lena > lena.max()/4) &
(lena < 3 * lena.max()/4)] = 0
最终得到两幅新的图像,如下图所示。
本攻略的完整代码如下。
import scipy.misc
import matplotlib.pyplot
import numpy
# 加载数组Lena
lena = scipy.misc.lena()
def get_indices(size):
arr = numpy.arange(size)
return arr % 4 == 0
# 绘制图像Lena
lena1 = lena.copy()
xindices = get_indices(lena.shape[0])
yindices = get_indices(lena.shape[1])
lena1[xindices, yindices] = 0
matplotlib.pyplot.subplot(211)
matplotlib.pyplot.imshow(lena1)
lena2 = lena.copy()
# 选取最大值的1/4到最大值的3/4之间的数据
lena2[(lena > lena.max()/4) & (lena < 3 * lena.max()/4)] = 0
matplotlib.pyplot.subplot(212)
matplotlib.pyplot.imshow(lena2)
matplotlib.pyplot.show()
小结
布尔型索引是高级索引的一种形式,因此它们的实现方式基本上是相同的。这意味着,布尔型索引也是利用一个特定的迭代器对象实现的。