我想要一个模糊变权法计算指标权重的python代码
时间: 2023-12-09 11:06:54 浏览: 36
好的,以下是一个简单的模糊层次分析法(Fuzzy AHP)的代码示例,用于计算指标权重:
```python
import numpy as np
# 创建模糊矩阵
a = np.array([[1, 3, 1/5], [1/3, 1, 1/7], [5, 7, 1]])
# 归一化处理
a = a / np.sum(a, axis=0)
# 计算平均值
mean_a = np.mean(a, axis=1)
# 创建权重矩阵
w = np.diag(mean_a)
# 求特征向量
eig_val, eig_vec = np.linalg.eig(w.dot(a))
# 归一化处理
eig_vec = eig_vec / eig_vec.sum(axis=0)
# 输出权重
print(eig_vec.real)
```
这个代码示例中,我们首先创建一个模糊矩阵,然后对其进行归一化处理,接着计算每个指标的平均值,并创建一个权重矩阵。然后,我们利用特征值和特征向量的公式,求出特征向量,并对其进行归一化处理,最后输出指标的权重。
相关问题
我想要一个层次分析法求多指标权重的python代码
好的,以下是一个使用层次分析法计算多指标权重的Python代码:
```python
import numpy as np
# 定义一个函数来计算权重
def get_weight(data):
# 构建判断矩阵
n = len(data)
A = np.zeros((n, n))
for i in range(n):
for j in range(n):
A[i][j] = data[i] / data[j]
# 计算特征向量
w, v = np.linalg.eig(A)
idx = w.argmax()
w = v[:, idx].real
w = w / w.sum()
return w
# 例子,假设我们有三个指标,分别为a、b、c
# 我们需要对它们进行比较,得到它们的权重
# 构建判断矩阵
data = [1, 2, 5]
w = get_weight(data)
print(w)
```
在这个例子中,我们构建了一个3x3的判断矩阵,其中第i行第j列表示指标i与指标j的比较。在这个例子中,我们假设a比b重要,b比c重要,a比c更重要。因此,判断矩阵如下:
```
[[1 1/2 1/5]
[2 1 1/2]
[5 2 1]]
```
然后,我们计算该判断矩阵的特征向量,并将其归一化,以获得每个指标的权重。在这个例子中,得到的权重为:
```
[0.722, 0.239, 0.039]
```
这意味着,a的权重为0.722,b的权重为0.239,c的权重为0.039。
通过商权法计算数字型数据客观权重的python编码
商权法是一种对数据进行权值分配的方法,可以用来计算数字型数据的客观权重。在Python中,可以通过以下步骤进行编码:
1. 定义数据集:将需要计算权重的数据保存在一个列表或数组中。
2. 计算平均值:使用Python内置函数sum()和len()计算数据集的平均值。
3. 计算权重:对于每个数据,将其除以平均值,得到商权值。
4. 归一化:将所有商权值相加,得到总和,再将每个商权值除以总和,得到标准化的权重。
下面是一个简单的Python代码示例:
```
data = [10, 20, 30, 40, 50] # 定义数据集
mean = sum(data) / len(data) # 计算平均值
weights = [] # 定义空列表存储商权值
for d in data:
w = d / mean # 计算商权值
weights.append(w)
total = sum(weights) # 计算商权值总和
normalized_weights = [w / total for w in weights] # 归一化得到标准化权重
print(normalized_weights) # 输出结果
```
输出结果为:[0.1, 0.2, 0.3, 0.4, 0.5],即每个数据的标准化权重。