模糊集运算规则合集之二,picture fuzzy set 。
图模糊集合上的运算规则,包括加法,乘法,数乘,幂乘,距离,得分函数精确函数,暂时我就用到这么多,之后有新研究会随时补充。
3.24补充三种不同的得分函数精确函数
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
# 计算距离的函数,q可以实现汉明,欧几里得,闵可夫斯基,切比雪夫距离
def distance_single(coords1, coords2, q=2): #计算一对一
r1 = coords1[0] - coords2[0]
r2 = coords1[1] - coords2[1]
r3 = coords1[2] - 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
# 计算距离的函数,q可以实现汉明,欧几里得,闵可夫斯基,切比雪夫距离
def distance_matrix(coords1, coords2, q=2): #计算多对多,以数列形式表达
x = [[] for x in range(16)]
dis = []
for i in range(16):
x[i] = coords1[i] - coords2[i]
if q == 1:
dis.append(reduce(lambda x, y: x + y, x[i]))
if q >= 2:
dis.append((reduce(lambda x, y: x ** q + y ** q, x[i])) ** (1 / q))
return dis
def score_wei(coords): # 计算得分函数
return (coords[0] -coords[2])
def score_jana(coords):
return (1+coords[0]-coords[2])/2
def score_garg(coords):
return coords[0]-coords[1]-coords[2]
def acc_wei(coords): # 计算得分函数
return (coords[0] +coords[1]+coords[2])
def acc_jana(coords):
return (coords[0]-coords[2])
def acc_garg(coords):
return coords[0]+coords[1]+coords[2]
def wa(coords2, w):
x = [[] for x in range(3)]
for i in range(len(w)):
x[0].append((1 - coords2[i][0]) ** w[i])
x[1].append(coords2[i][1] ** w[i])
x[2].append((coords2[i][2]) ** w[i])
return [1 - reduce(lambda x, y: x * y, x[0])
, reduce(lambda x, y: x * y, x[1]), reduce(lambda x, y: x * y, x[2])] # 匿名函数实现函数内元素相乘