LabelRank演算法 Python實現

2021-10-21 20:15:59 字數 2144 閱讀 9934

演算法的定義和介紹就不收了,**中都有,下面直接上**實現。

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 若某一輪沒有進行任何交換,則說明已經有序,不需要再...