有10个维度为(256,128,130)的tensor,计算10个tensor两两之间的相似性以及差异性,并将相似性和差异性可视化。
- 问题描述
- 解决办法
问题描述
有10个维度为(256,128,130)的tensor,计算10个tensor两两之间的相似性以及差异性,并将相似性和差异性可视化。
解决办法
代码如下
import numpy as np
from scipy.spatial.distance import cosine
import matplotlib.pyplot as plt
# 生成10个随机的(256, 128, 130)的tensor
tensors = [np.random.rand(256, 128, 130) for _ in range(10)]
# 计算相似性和差异性
similarities = np.zeros((10, 10))
differences = np.zeros((10, 10))
for i in range(10):
for j in range(10):
# 计算余弦相似性
similarity = 1 - cosine(tensors[i].flatten(), tensors[j].flatten())
similarities[i, j] = similarity
# 计算差异性
difference = np.linalg.norm(tensors[i] - tensors[j])
differences[i, j] = difference
# 可视化相似性和差异性
fig, ax = plt.subplots(1, 2, figsize=(12, 6))
# 相似性热力图
ax[0].imshow(similarities, cmap='viridis')
ax[0].set_title('Similarities')
ax[0].set_xlabel('Tensor Index')
ax[0].set_ylabel('Tensor Index')
# 差异性热力图
ax[1].imshow(differences, cmap='viridis')
ax[1].set_title('Differences')
ax[1].set_xlabel('Tensor Index')
ax[1].set_ylabel('Tensor Index')
# 添加颜色条
cbar0 = ax[0].figure.colorbar(ax[0].images[0], ax=ax[0])
cbar0.ax.set_ylabel('Similarity', rotation=90)
cbar1 = ax[1].figure.colorbar(ax[1].images[0], ax=ax[1])
cbar1.ax.set_ylabel('Difference', rotation=90)
# 调整子图布局
plt.tight_layout()
# 显示图形
plt.show()