模糊集运算规则合集之二,picture fuzzy set 。
图模糊集合上的运算规则,包括加法,乘法,数乘,幂乘,距离,得分函数精确函数,暂时我就用到这么多,之后有新研究会随时补充。
import pandas as pd
from matplotlib.cbook import flatten
import numpy as np
import scipy as sp
from functools import reduce
'''图片模糊集合的规则代码'''
inf=9999999 #代表n
np.set_printoptions(suppress=True)
def plus(coords1, coords2): # 和运算
mu1=1-(1-coords1[0])*(1-coords2[0])
eta1=coords1[1]*coords2[1]
nu1=coords1[2]*coords2[2]
return [mu1,eta1,nu1]
def times(coords1, coords2): # 机运算
mu2=coords1[0]*coords2[0]
eta2=coords1[1]*coords2[1]
nu2=1 - (1 - coords1[2]) * (1 - coords2[2])
return [mu2,eta2,nu2]
def ltimes(lamda, coords2): # 数乘运算 传出来的五个参数分别是对应位置。
x=[ [] for x in range(3)]
for i in range(len(lamda )):
x[0].append(1-(1-coords2[i][0])**lamda[i])
x[1].append(coords2[i][1]**lamda[i])
x[2].append(coords2[i][2]**lamda[i])
sum=pd.concat([pd.Dataframe(x[0]),pd.Dataframe(x[1]),
pd.Dataframe(x[2])],axis=1)
return sum
def lpower(lamda, coords2): # 乘方运算
x=[ [] for x in range(3)]
for i in range(len(lamda )):
x[0].append(coords2[i][0]**lamda[i])
x[1].append(coords2[i][1]**lamda[i])
x[2].append(1 - (1 - coords2[i][2]) ** lamda[i])
sum=pd.concat([pd.Series(x[0]),pd.Series(x[1]),
pd.Series(x[2])],axis=1)
return sum
def distance(coords1, coords2,q=2): # 计算距离的函数,q可以实现汉明,欧几里得,闵可夫斯基,切比雪夫距离
r1=coords1[0]-coords2[0]
r2=(1-coords1[1])-(1-coords2[1])
r3=(1-coords1[2])-(1-coords2[2])
if q==1:
dis =(0.5)*((np.abs(r1))+(np.abs(r2))+(np.abs(r3)))
if q>=2:
dis =(0.5)*((r1)**q+(r2)**q+(r3)**q)**(1/q)
return dis
def score(coords2): # 计算得分函数
return ((coords2[0]+2-coords2[1]-coords2[2])/3)
def accuary(coords2): # 计算精确函数
return ((coords2[0]-coords2[2])/2)
if __name__ == '__main__':
'''一些简单的求证'''
e1=[0.6,0.3,0.1]
e2=[0.4,0.3,0.3]
e3=[[0.6,0.3,0.1],[0.6,0.2,0.2]]
e4=[[0.6,0.3,0.1],[0.4,0.3,0.3]]
l=[2,2]
print(score(e3[0]),score(e3[1]))
print(accuary(e3[0]),accuary(e3[1]))
print(plus(e1,e2))
print(times(e1,e2))
print(ltimes(l,e4))
print(lpower(l,e4))
print(distance(e1,e2,2))
print(distance(e1,e2,1))



