资讯详情

利用MDS算法根据城市之间的距离还原抽象地图(python)

当你有这样的数据时,你可以很容易地理解城市之间的相对距离,但看表格毕竟有点麻烦,如果它是可视化的,它将更好地帮助理解具体的信息。

首先是仓库的安装,需要通过pip install或内部安装编译器(如内部安装)pycharm的setting)

import numpy as np import matplotlib.pyplot as plt import math import xlrd  # 读取excel的库

然后是数据读取函数

def read_xlsx():     distance_data = []     xlsx_data = xlrd.open_workbook("data.xlsx")     table_data = xlsx_data.sheet_by_index(0)            # 获取data.xlsx第一张表     for k in range(1, table_data.nrows):                # 获取表中所有数据行         line_data = table_data.row_values(k)         distance_data.append(line_data)     city_name = table_data.row_values(0)                # 获取表中第0行的城市名称     return np.array(distance_data), city_name

mds函数

def mds_function(distance, k):     m, n = distance.shape                       # 获取距离矩阵的行数和列数     square_matrix = distance * distance         # 距离矩阵平方后获得矩阵     o_matrix = np.zeros((n, n))                 # 同阶0矩阵获取     e_matrix = np.eye(n)                        # 获取同阶单位阵     # 计算内积矩阵     inner_product_matrix = -1 / 2 * \         ((e_matrix - 1 / n * o_matrix) @ square_matrix @ (e_matrix - 1 / n * o_matrix))     eigenvalue, eigenvector = np.linalg.eigh(inner_product_matrix)           # 对内积矩阵进行特征分解,获取内积函数的特征值(升序)和特征向量     eigenvector = np.flip(eigenvector, axis=1)                               # 由于翻转特征向量是按特征值升序排列的     sigma = np.zeros((k, k))     for j in range(1, k   1):         sigma[j - 1, j - 1] = math.sqrt(eigenvalue[-j])     return sigma @ eigenvector[:, :k].T

绘图函数

def create_map(data, city):     x_axis = -data[1]     y_axis = data[0]     plt.rcParams['axes.unicode_minus'] = False      # 防止负值报错     plt.rcParams['font.sans-serif'] = ['SimHei']    # 防止中文报错     plt.scatter(x_axis, y_axis)     for i in range(len(x_axis)):         plt.annotate(city[i], xy=(x_axis[i], y_axis[i]), xytext=(x_axis[i]   0.1, y_axis[i]   0.1))     plt.show()

主函数

if __name__ == "__main__":     distance_, city_ = read_xlsx()     result_data = mds_function(distance_, 2)     create_map(result_data, city_)

这样,你就可以得到一个简单的城市距离地图(更抽象)

标签: 50固态继电器mds75eb

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司