topsis代码
时间: 2023-07-02 10:23:48 浏览: 54
topsis_matlab_topsis代码_topsis_权重kb_
5星 · 资源好评率100%
以下是一个简单的Topsis算法的Python实现:
```python
import numpy as np
def topsis(matrix, weights, impacts):
# 归一化矩阵
normalized_matrix = matrix / np.sqrt(np.sum(matrix ** 2, axis=0))
# 加权归一化矩阵
weighted_normalized_matrix = normalized_matrix * weights
# 正理想解和负理想解
positive_ideal = np.max(weighted_normalized_matrix, axis=1)
negative_ideal = np.min(weighted_normalized_matrix, axis=1)
# 距离正理想解和负理想解的距离
positive_distances = np.sqrt(np.sum((weighted_normalized_matrix - positive_ideal.reshape(-1, 1)) ** 2, axis=0))
negative_distances = np.sqrt(np.sum((weighted_normalized_matrix - negative_ideal.reshape(-1, 1)) ** 2, axis=0))
# 综合得分
scores = negative_distances / (positive_distances + negative_distances)
# 根据优劣标准进行排序
if impacts[0] == '+':
rankings = np.argsort(scores)[::-1]
else:
rankings = np.argsort(scores)
return rankings
```
其中,`matrix`是原始矩阵,每行代表一个样本,每列代表一个特征;`weights`是各个特征的权重,`impacts`是各个特征的优劣标准,可以是`'+'`表示越大越好,`'-'`表示越小越好。
函数返回一个排名列表,其中排名越靠前的样本越好。
阅读全文