演算法的定義和介紹就不收了,**中都有,下面直接上**實現。
def
label_rank
(a, in_, q, r)
:def
ismember
(a,b)
:for i in a:
res =
1for j in b:
if i not
in j:
res =
0break
if res ==1:
break
return res
aori = a.copy(
) a = a + np.eye(
len(a)
)#新增自環
# p_0 = a / a.sum(axis=0)
# p_0 = np.array([[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0], [0, 0],[0, 0],[0, 0],[0, 1],[0, 0],[1, 0],[0, 0],[0, 0],
# [0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0],[0, 0]])
p_0 = np.eye(
len(a)
) p_pre = np.dot(a.t, p_0)
p_pre = p_pre / p_pre.
sum(axis=0)
a =1 com =
count =
0while a:
#step1:propagation
p_now = np.dot(a.t, p_pre)
#step2:inflation
p_in = np.power(p_now, in_)
p_now = p_in /
(p_in.
sum(axis=1)
+0.00001
).reshape(-1
,1)#step3:cutoff
p_now[p_now < r]=0
# #step4:explicit conditional update
# manow = np.nanargmax(p_now, axis=1)
# mapre = np.nanargmax(p_pre, axis=1)
# restart =
# for i in range(len(a)):
# gain = 0
# nb = np.nonzero(aori[i,:])
# maxi = np.nanargmax(p_now[i, :])
# maxi = np.nonzero(p_now[i, :] == maxi)
# maxnb = manow[nb]
# for k in range(len(nb)):
# maxnbid = np.nonzero(p_now[nb[k], :] == maxnb[k])
# if ismember(maxi, maxnbid):
# gain += 1
# if gain >= q * len(nb):
# p_now[restart, :] = p_pre[restart, :]
#step5:stop criterion
# if ismember(np.nonzero(p_now[i, :]==manow[i]), np.nonzero(p_pre[i, :] == mapre[i])):
if count ==50:
a =0 p_pre = p_now
count +=
1 r = p_now
# for one in range(len(p_now)):
# print(one+1, p_now[one,:])
return r
以上是labelrank演算法的python實現版本,目前來說還比較粗糙,還有許多地方需要優化完善,後續版本敬請期待。 最大回文子串manacher演算法python
關於最大回文子串問題,有兩種處理方法 1.以每個字元為中心,向兩邊尋找回文子串,遍歷整個陣列後,返回最長的。該方法時間複雜度較大為o n 2 2.乙個中等難度的動態規劃演算法 馬拉車 step1 給每個字元左右都加上特殊字元比如 處理後,能使字串s長度為奇 step2 現在的問題變成如何高效求得rl...
基於Grabcut演算法的前景分割(python)
import cv2 import numpy as np import math 基於grabcut演算法的前景分割 src cv2.imread gaussian blur.png src cv2.resize src,0 0 fx 0.5,fy 0.5 r cv2.selectroi inpu...
python排序實現 經典排序演算法python實現
一 氣泡排序 1 從前往後相鄰元素進行對比,如果前乙個元素大於後乙個元素則交換,將最大的元素 浮 到最後的位置上 2 再對前n 1個元素進行相同操作 3 持續對越來越少的元素進行相同操作,每一輪都選出當前的最大數,直到沒有任何元素需要比較 優化 1 若某一輪沒有進行任何交換,則說明已經有序,不需要再...