我想在 MATLAB/Python 上计算模糊关系组合,想知道 MATLAB 或 Python 中是否有任何内置函数来执行此操作......
下面是一个例子:
R1 = [{ 3, 4, .7}, {3, 5, 0}, { 4, 4, 1}, { 4, 5, .1}]
R2 = [{ 3,3, 0}, { 3, 5, .1}, { 4, 4, 0}, { 4, 5, .6}]
我正在尝试计算:
R1oR2
我正在寻找"最大最小值"和"最大乘积"方法...
好的...
既然没人给出答案,我就自己写了...这是 Python 代码:
import numpy as np
# Max-Min Composition given by Zadeh
def maxMin(x, y):
z = []
for x1 in x:
for y1 in y.T:
z.append(max(np.minimum(x1, y1)))
return np.array(z).reshape((x.shape[0], y.shape[1]))
# Max-Product Composition given by Rosenfeld
def maxProduct(x, y):
z = []
for x1 in x:
for y1 in y.T:
z.append(max(np.multiply(x1, y1)))
return np.array(z).reshape((x.shape[0], y.shape[1]))
# 3 arrays for the example
r1 = np.array([[1, 0, .7], [.3, .2, 0], [0, .5, 1]])
r2 = np.array([[.6, .6, 0], [0, .6, .1], [0, .1, 0]])
r3 = np.array([[1, 0, .7], [0, 1, 0], [.7, 0, 1]])
print "R1oR2 => Max-Min :n" + str(maxMin(r1, r2)) + "n"
print "R1oR2 => Max-Product :n" + str(maxProduct(r1, r2)) + "nn"
print "R1oR3 => Max-Min :n" + str(maxMin(r1, r3)) + "n"
print "R1oR3 => Max-Product :n" + str(maxProduct(r1, r3)) + "nn"
print "R1oR2oR3 => Max-Min :n" + str(maxMin(r1, maxMin(r2, r3))) + "n"
print "R1oR2oR3 => Max-Product :n" + str(maxProduct(r1, maxProduct(r2, r3))) + "nn"
这是它给出的答案:
R1oR2 => Max-Min :
[[ 0.6 0.6 0. ]
[ 0.3 0.3 0.1]
[ 0. 0.5 0.1]]
R1oR2 => Max-Product :
[[ 0.6 0.6 0. ]
[ 0.18 0.18 0.02]
[ 0. 0.3 0.05]]
R1oR3 => Max-Min :
[[ 1. 0. 0.7]
[ 0.3 0.2 0.3]
[ 0.7 0.5 1. ]]
R1oR3 => Max-Product :
[[ 1. 0. 0.7 ]
[ 0.3 0.2 0.21]
[ 0.7 0.5 1. ]]
R1oR2oR3 => Max-Min :
[[ 0.6 0.6 0.6]
[ 0.3 0.3 0.3]
[ 0.1 0.5 0.1]]
R1oR2oR3 => Max-Product :
[[ 0.6 0.6 0.42 ]
[ 0.18 0.18 0.126]
[ 0.035 0.3 0.05 ]]