在吴恩达DeepLearning.ai课程1-3节中,有如下一段代码:
X, Y = load_planar_dataset()
# Visualize the data:plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral);
我在运行过后,实际上会报错
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\colors.py in to_rgba(c, alpha) 131 try: --> 132 rgba = _colors_full_map.cache[c, alpha] 133 except (KeyError, TypeError): # Not in cache, or unhashable. TypeError: unhashable type: 'numpy.ndarray' During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last)
.
.
.
3991 raise ValueError(msg.format(c.shape, x.size, y.size)) 3992 else: 3993 colors = None # use cmap, norm after collection is created ValueError: c of shape (1, 400) not acceptable as a color sequence for x with size 400, y with size 400
最后一行错误日志说明参数c的shape和x,y的shape不一致,而我在输入时x = X[0,:], y = X[1,:],c = Y,最初我觉得它们的大小
都是400(因为load_planar_dataset()函数生成的就是400个样本集),所以不应该报错,后来我又仔细读了一下报错信息,结合前两天
在1-2课程中学到的知识,意识到(400,)和(1,400)是两个完全不同的类型,(400,)是秩为1的数组,(1,400)是一个二维数组,它们是
不匹配的,解决这个问题,可以有几种方法:
1、将c=Y改为c=np.squeeze(Y),np.squeeze(Y)会把Y的shape从(1, 400)变成了(400,)
2、将c=Y改为c=Y[0,:],效果同上
3、将X[0, :], X[1, :]改成X[0, :].reshape(1, -1), X[1, :].reshape(1, -1),这种更复杂,仅作验证用,改成之后可以发现这时c=Y就能编译通过了。
显示图像如下:
此外,c这个参数,除了赋值序列和cmap参数配合使用,还可以赋值成各种颜色,如c='blue',显示出来的点的颜色就是蓝色,显示图像如下:
此外,可以通过修改cmap参数,可以根据颜色映射表显示其他的颜色,如:cmap=plt.get_cmap('rainbow'),显示如下:
也可以自定义:
from matplotlib import colors
cmap=colors.ListedColormap(['g','r'])
显示图像为: