优化这段代码import pandas as pd import numpy as np import matplotlib.pyplot as plt #计算信息熵的函数 def calc_ent(x): """ calculate shanno ent of x """ #x.shape[0]计算数组x的元素长度,x长度为x.shape[0]=6 #set() 函数创建一个无序不重复元素集 x_value_list = set([x[i] for i in range(x.shape[0])]) #得到数组x的元素(不包含重复元素),即x_value_list={'c', 'b', 'a'} ent = 0.0 for x_value in x_value_list: p = float(x[x == x_value].shape[0]) / x.shape[0]#计算每个元素出现的概率 logp = np.log2(p) ent -= p * logp print(ent) # 读取Excel文件 df= pd.read_excel("C:\\Users\\a'b'c\\Desktop\\毕设\\图纸数据5.0.xlsx") # 获取Excel文件的列数 num_cols = df.shape[1] weights=[] # 将每一列转换为array形式 for i in range(num_cols): # 获取列名 col_name = df.columns[i] # 将列转换为array形式 col_array = np.array(df[col_name]) #输出每一列的信息熵的值 ent = calc_ent(col_array) #print(col_name, ent) x = i y =ent plt.figure() plt.plot(x, y, linestyle='--', color='blue') plt.xlabel('序号') plt.ylabel('信息熵') plt.show()想要把x轴为序号i,Y轴依次是每个i对应的ent值
时间: 2023-06-15 07:06:12 浏览: 167
python数据分析与可视化 import pandas as pd import numpy as np import m
你可以将每个i对应的ent值存储到一个数组中,然后将数组作为参数传递给plt.plot()函数,这样就可以在同一个图表中显示所有的信息熵值了。修改后的代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#计算信息熵的函数
def calc_ent(x):
"""
calculate shanno ent of x
"""
#x.shape[0]计算数组x的元素长度,x长度为x.shape[0]=6
#set() 函数创建一个无序不重复元素集
x_value_list = set([x[i] for i in range(x.shape[0])])
#得到数组x的元素(不包含重复元素),即x_value_list={'c', 'b', 'a'}
ent = 0.0
for x_value in x_value_list:
p = float(x[x == x_value].shape[0]) / x.shape[0]#计算每个元素出现的概率
logp = np.log2(p)
ent -= p * logp
return ent
# 读取Excel文件
df= pd.read_excel("C:\\Users\\a'b'c\\Desktop\\毕设\\图纸数据5.0.xlsx")
# 获取Excel文件的列数
num_cols = df.shape[1]
ent_list = [] # 存储每一列的信息熵值
for i in range(num_cols):
# 获取列名
col_name = df.columns[i]
# 将列转换为array形式
col_array = np.array(df[col_name])
#输出每一列的信息熵的值
ent = calc_ent(col_array)
ent_list.append(ent)
# 绘制信息熵的折线图
plt.plot(ent_list, linestyle='--', color='blue')
plt.xlabel('序号')
plt.ylabel('信息熵')
plt.show()
```
这段代码将每一列的信息熵值存储在ent_list数组中,然后将ent_list作为参数传递给plt.plot()函数,绘制出信息熵的折线图。
阅读全文