2017-03-20 58 views
0

我想擴展this question,以便以多線程友好的方式查找輪廓區域。Python:使用多線程友好代碼計算輪廓包圍的區域

我試過下面的代碼:

c = cntr.Cntr(Z, X_, radial) 
    # Trace a contour at calc_levels 
    for loop in range(len(calc_levels)): 
     res = c.trace(calc_levels[loop]) 
     # result is a list of arrays of vertices and path codes 
     # (see docs for matplotlib.path.Path) 
     nseg = len(res) // 2 
     segments = res[:nseg] 
     area = PolyArea(segments[0][:,0], segments[0][:,1]) 

def PolyArea(x,y): 
    return 0.5*np.abs(np.dot(x,np.roll(y,1))-np.dot(y,np.roll(x,1))) 

在這我試着適應代碼here何爲PolyArea代碼來自this question但是1)面積的計算不是很正確和2)它減慢我的多線程代碼。

我說該區域不正確,因爲使用下面的代碼,我花了很長時間檢查,我得到完全不同的答案。然而,這段代碼是絕對不會多線程兼容,導致整個代碼停頓下來

fig1 = plt.figure() 
    ax1 = fig1.add_subplot(111) 
    cs = ax1.contour(Z,X_,radial, levels = calc_levels,colors='k') 
    for loop in range(len(calc_levels)): 
     vs = None 
     contour_ = None 
     contour_ = cs.collections[loop] 
     vs = contour_.get_paths()[0].vertices 
     # Compute area enclosed by vertices 
     features['Radial_Area_' + mystr + str(int(thisLevels[loop]*100))] = area(vs) 

有沒有人能幫助我或者調試的代碼的第一部分,或寫不同的東西,這將更好地工作?

感謝

回答

1

對不起,我是不是比較類似。現在看同一個文件,我看到計算出的面積是相同的!所以代碼

c = cntr.Cntr(Z, X_, radial) 
# Trace a contour at calc_levels 
for loop in range(len(calc_levels)): 
    res = c.trace(calc_levels[loop]) 
    # result is a list of arrays of vertices and path codes 
    # (see docs for matplotlib.path.Path) 
    nseg = len(res) // 2 
    segments = res[:nseg] 
    area = PolyArea(segments[0][:,0], segments[0][:,1]) 

def PolyArea(x,y): 
    return 0.5*np.abs(np.dot(x,np.roll(y,1))-np.dot(y,np.roll(x,1))) 

是否工作如何我認爲它應該和比其他代碼快得多。

我會刪除這個帖子後給那些誰正在尋找在一次看到我的回答

+0

如果你能程度上,這給[MCVE],你可以將這件事,因爲它可能是爲別人有用。如果您決定不生成最簡單的示例,則可以將其刪除,因爲它沒有多大幫助。 – ImportanceOfBeingErnest