续上一篇有关模糊数学的运算中的内容,这一篇文章将进行模糊矩阵自反性判断、对称性判断、传递性的判断以及来计算传递闭包矩阵。这里事实上也是聚类分析等前操步骤。可以参考之前有关模糊聚类分析的内容,其中也有一些比较有参考意义的代码。
都默认为nxn阶模糊方阵
即rii=1
def zfar(M):
a=[]
for i in range(len(M)):
m=M[i]
if m[i]!=1:
a.append('0')
if len(a)==0:
return 'True'
else:
return 'False'
print(zfar(ma))
ma=[[1,0,0],
[0,1,0],
[0,0,1]]
#输出结果为
True
即rij=rji
def dcar(M):
Mt=np.stack(M,axis=1)
print(Mt)
a=[]
for i in range(len(M)):
m=M[i]
mt=Mt[i]
for j in range(len(m)):
if m[j]!=mt[j]:
a.append('1')
if len(a)==0:
return 'True'
else:
return 'False'
ma=[[1,0,0],
[0,1,0],
[0,0,1]]
print(dcar(ma))
输出结果为:
True
即同时满足自反性和对称性:
def arlike(M):
if zfar(M) == 'True' and dcar(M) == 'True':
return 'Ture'
else:
return 'False'
print(arlike(ma))
def jzhc(M,N):#必须是m*s,s*n的矩阵输入
R=[]
N=np.stack(N,axis=1)#实现转置
for i in range(len(M)):
mr=[]
for j in range(len(N)):
r=(arjj([M[i]],[N[j]]))[0]
mr.append(max(r))
R.append(mr)
return R
def cdar(M):
hcar=jzhc(M,M)#使用矩阵合成代码
print(hcar)
a=[]
for i in range(len(M)):
m=M[i]
n=hcar[i]
for j in range(len(m)):
if m[j]>n[j]:
a.append('1')
if len(a)==0:
return 'True'
else:
return 'False'
print(cdar(ma))
即同时满足对称、自反和传递矩阵
def djar(M):
if arlike(M) == 'Ture' and cdar(M) == 'True':
return 'True'
else:
return 'False'
print(djar(ma))
返回传递闭包矩阵和幂数
#相等矩阵的判断
def ddar(M,Mt):
a=[]
for i in range(len(M)):
m=M[i]
mt=Mt[i]
for j in range(len(m)):
if m[j]!=mt[j]:
a.append('1')
if len(a)==0:
return 'True'
else:
return 'False'
#传递闭包矩阵
def bbar(M):
if arlike(M)!='True':
return 'Array False'
else:
b=M
c=2
while ddar(b,M)!='True':
M=jzhc(b,b)
b=M
c=c+2
break
return b,c
R=[[1,0.1,0.2],
[0.1,1,0.3],
[0.2,0.3,1]]
print(bbar(R))
##输出结果为:
([[1, 0.1, 0.2], [0.1, 1, 0.3], [0.2, 0.3, 1]], 2)
① 理论先行
② 代码自写(不要复制粘贴),以上代码全部都是以最基础的逻辑运算来写的,只要会python基础就能实现,不涉及任何需要调动库中复杂的函数的理解。全是for if while def
③ 标准化的方式将于后文继续介绍。
④ 代码总结
def dcar(M):
Mt=np.stack(M,axis=1)
print(Mt)
a=[]
for i in range(len(M)):
m=M[i]
mt=Mt[i]
for j in range(len(m)):
if m[j]!=mt[j]:
a.append('1')
if len(a)==0:
return 'True'
else:
return 'False'
ma=[[1,0,0],
[0,1,0],
[0,0,1]]
print(dcar(ma))
def zfar(M):
a=[]
for i in range(len(M)):
m=M[i]
if m[i]!=1:
a.append('0')
if len(a)==0:
return 'True'
else:
return 'False'
print(zfar(ma))
def arlike(M):
if zfar(M) == 'True' and dcar(M) == 'True':
return 'True'
else:
return 'False'
print(arlike(ma))
def cdar(M):
hcar=jzhc(M,M)
a=[]
for i in range(len(M)):
m=M[i]
n=hcar[i]
for j in range(len(m)):
if m[j]>n[j]:
a.append('1')
if len(a)==0:
return 'True'
else:
return 'False'
print(cdar(ma))
def djar(M):
if arlike(M) == 'Ture' and cdar(M) == 'True':
return 'True'
else:
return 'False'
print(djar(ma))
#相等矩阵的判断
def ddar(M,Mt):
a=[]
for i in range(len(M)):
m=M[i]
mt=Mt[i]
for j in range(len(m)):
if m[j]!=mt[j]:
a.append('1')
if len(a)==0:
return 'True'
else:
return 'False'
#传递闭包矩阵
def bbar(M):
if arlike(M)!='True':
return 'Array False'
else:
b=M
c=2
while ddar(b,M)!='True':
M=jzhc(b,b)
b=M
c=c+2
break
return b,c
R=[[1,0.1,0.2],
[0.1,1,0.3],
[0.2,0.3,1]]
print(bbar(R))