picture fuzzy set 运算规则python实现

模糊集运算规则合集之二,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])]  # 匿名函数实现函数内元素相乘






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值