《Python程序设计与科学计算》中“布尔型索引”的一些笔记。
利用布尔型索引可以实现对图像分割呈现。在处理过程中,将图片处理成数组,通过布尔型索引对图片所得数组进行选取操作,完成想要的效果,输出结果如图1所示。
import matplotlib.pyplot as plt
import numpy as np
a = np.linspace(0, 2 * np.pi, 50)
b = np.sin(a)
plt.plot(a, b)
mask = b >= 0
plt.plot(a[mask], b[mask], 'bo')
mask = (b >= 0) & (a <= np.pi / 2)
plt.plot(a[mask], b[mask], 'go')
plt.show()
在此代码中有几处说明一下:
1.关于‘bo’
plt.plot(a[mask], b[mask], 'bo') # 'b'对应的是颜色是“蓝色”,'o'对应的标记说明是“实心圈标记”
建议多去了解plt.plot()函数细节
plt.plot(x,y,format_string,kwargs)
其中,x轴数据,y轴数据,format_string控制曲线的格式字串 ,format_string 由颜色字符,风格字符,和标记字符。(详细说明可查看:https://blog.csdn.net/u014539580/article/details/78207537)
相关说明图片如下:
若将此处的代码中的’bo’改为’ro’,即:
import matplotlib.pyplot as plt
import numpy as np
a = np.linspace(0, 2 * np.pi, 200)
b = np.sin(a)
plt.plot(a, b)
mask = b >= 0
plt.plot(a[mask], b[mask], 'ro')
mask = (b >= 0) & (a <= np.pi / 2)
plt.plot(a[mask], b[mask], 'go')
plt.show()
则图像显示,如图2所示:
2.关于‘mask’
mask是一个只包含True和False的ndarray,它的shape和data一致,这个数组是让你指定需要掩盖的值的,标记为True的数据会被掩盖掉。
(关于mask的详细说明可查看:https://blog.csdn.net/qq_34018578/article/details/83242990)
3.关于np.linspace
该函数的形式为:
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
说明:在规定的时间内,返回固定间隔的数据。在区间[start
, stop
]中,它将返回“num”个等间距的样本。其中,区间的结束端点可以被排除在外。
参数:
start : scalar
队列的开始值
stop : scalar
队列的结束值。当‘endpoint=False’时,不包含该点。在这种情况下,队列包含除了“num+1"以外的所有等间距的样本。要注意的是,当‘endpoint=False’时,步长会发生改变。
num : int, optional
要生成的样本数。默认是50,必须要非负。
endpoint : bool, optional
如果是True,’stop’是最后的样本。否则,'stop’将不会被包含。默认为true
retstep : bool, optional
If True, return (samples
, step
), where step
is the spacing between samples.
返回值:
samples : ndarray
在闭区间[start, stop]或者是半开区间[start, stop)中有num个等间距的样本
step : float
仅仅当”retstep=True“时候会返回样本之间间距的大小
此时若将以下一行代码:
a = np.linspace(0, 2 * np.pi, 200)
改为:
a = np.linspace(0, 2 * np.pi)
则图像显示,如图3所示: