使用numpy的广播性质,可以更好的进行dataframe和series之间的运算,而不是纠结数组循环的设置。
一级模糊综合评判,就是一个矩阵和一个数列之间取大取小的运算。这个运行结果的截图清楚的显示了具体的运算步骤。
需要注意的是,一开始我使用原数组和数列运算并不正确,产生报错。
temp = np.minimum(df, w)
一般广播规则
在两个数组上运行时,NumPy会逐元素地比较它们的形状。它从尾随尺寸开始,并向前发展。两个尺寸兼容时
他们是平等的,或者
其中一个是1
如果不满足这些条件,则抛出 ValueError: operands could not be broadcast together 异常,指示数组具有不兼容的形状。结果数组的大小是沿输入的每个轴不是1的大小。
换句话说,尺寸为1的尺寸被拉伸或“复制”以匹配另一个尺寸。因此我们需要reshape函数把数列拉伸成5*1的矩阵才能进行运算。
代码如下
import pandas as pd
import numpy as np
def getdef(n):
return pd.read_excel('t4.xlsx') # 这个会直接默认读取到这个Excel的第一个表单
def fuzzy(df):
print('\n数组为\n',df)
w = np.array([0.35, 0.35, 0.1, 0.1, 0.1])
ww = w.reshape(5,1)
print('\n数列为\n',ww)
temp = np.minimum(df, ww)
print('\n取小运算的运算步骤\n ',temp)
print('\n再将每列取大运算\n ',temp.max())
if __name__ == '__main__':
print(fuzzy(getdef(0)))
github仓库在https://github.com/rivendelltom/decision-making-study