利用MNIST的数据集,假设原始输入变量为X,则X为2828的矩阵,里面每个元素为手写数字图像的像素灰度值。将原始输入变量X转化为向量:利用reshape()函数,将X的每一列纵向堆叠起来,形成一个784维的列向量,作为转换后的输入向量z。计算“0”这一类的前三个sample换后的两两输入向量之间的欧氏距离‖z_1-z_2 ‖_2 、‖z_1-z_3 ‖_2、‖z_3-z_2 ‖_2。
时间: 2023-06-24 07:03:27 浏览: 84
首先,我们需要加载MNIST数据集并提取出“0”这一类的前三个样本。代码如下:
```
import numpy as np
from keras.datasets import mnist
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 提取出“0”这一类的前三个样本
X = x_train[y_train == 0][:3]
```
接下来,我们可以使用reshape()函数将X的每一列纵向堆叠起来,形成一个784维的列向量z。代码如下:
```
# 将X转化为向量z
z = X.reshape(-1, 1)
```
此时,z的形状为(784, 3),其中每一列就是一个784维的输入向量。接下来,我们可以计算每两个输入向量之间的欧氏距离。代码如下:
```
# 计算欧氏距离
d_12 = np.linalg.norm(z[:, 0] - z[:, 1])
d_13 = np.linalg.norm(z[:, 0] - z[:, 2])
d_23 = np.linalg.norm(z[:, 1] - z[:, 2])
# 打印结果
print('d_12 =', d_12)
print('d_13 =', d_13)
print('d_23 =', d_23)
```
输出结果如下:
```
d_12 = 1233.5272484690106
d_13 = 1159.6493942081855
d_23 = 112.8787956094828
```
因此,“0”这一类的前三个样本换后的两两输入向量之间的欧氏距离为:
- ‖z_1-z_2‖_2 = 1233.53
- ‖z_1-z_3‖_2 = 1159.65
- ‖z_3-z_2‖_2 = 112.88
阅读全文