在吳恩達DeepLearning.ai課程1-3節中,有如下一段代碼:
X, Y = load_planar_dataset()
# Visualize the data:plt.scatter(X[, :], X[, :], c=Y, s=, 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'])
顯示圖像為: