1.加载数据
def load_data(path,transpose=True):
data=sio.loadmat(path)
y=data.get("y")#before reshape:(5000, 1)
y=y.reshape(y.shape[0])
X=data.get("X")#(5000,400),(400,)
if transpose:
#向量化,让每列为一个样本变为每行是一个样本?
X=np.array([im.reshape((20,20)).T for im in X])
X=np.array([im.reshape(400) for im in X])#将样本展开为原来的(400,)
return X,y
X, y = load_data('code/ex3-neural network/ex3data1.mat')
print(X.shape)
print(y.shape)
(5000, 400)
(5000,)
2.画图
def plot_an_image(image):
fig,ax=plt.subplots(figsize=(1,1))
ax.matshow(image.reshape((20, 20)), cmap=matplotlib.cm.binary)
plt.xticks(np.array([])) # just get rid of ticks去除刻标
plt.yticks(np.array([]))
pick_one = np.random.randint(0, 5000)
plot_an_image(X[pick_one,:])
plt.show()
print('this should be {}'.format(y[pick_one]))
matplotlib.pyplot.matshow 矩阵可视化,plot a matrix or an array as an image。
在matplotlib中ticks表示的是刻度,而刻度有两层意思,一个是刻标(locs),一个是刻度标签(tick labels)。在作图时,x轴y轴都是连续的,所以刻标可以随意指定,就是在连续变量上找寻位置,而刻度标签则可以对应替换:
xticks()返回了两个对象,一个是刻标(locs),另一个是刻度标签
locs, labels = xticks()
def plot_100_image(X):
size=int(np.sqrt(X.shape[1]))
sample_idx=np.random.choice(np.arange(X.shape[0]),100)#在5000个样本里选100个
sample_images=X[sample_idx,:]
fig,ax_array=plt.subplots(nrows=10,ncols=10,sharex=True,sharey=True)
for r in range(10):
for c in range(10):
ax_array[r,c].matshow(sample_images[10*r+c].res