我試圖加快在python採用並行處理我的代碼段,但我無法得到它的工作權利,甚至發現有與我有關的例子。並行化圖像處理使用numpy的
的代碼產生使用Delaunay三角剖分的圖像的低多邊形版本,而這減慢我下來是找到每個三角形的平均值的部分。
我已經能夠獲得通過矢量化我的代碼一個很好的速度增加,但希望能得到更多的使用並行化:
的代碼我無法用是循環的非常簡單:
for tri in tris:
lopo[tridex==tri,:] = np.mean(hipo[tridex==tri,:],axis=0)
引用的變量如下。
tris
- 三角形的所有索引的獨特蟒蛇名單
lopo
- 原始圖像
hipo
一個numpy的陣列
tridex
- 與圖像大小相同的Numpy數組。每個元素表示的像素,並存儲該像素位於內
我似乎無法找到使用多個numpy的數組作爲輸入,具有共享它們中的一個很好的例子的三角形。
我試着多(與上面的代碼片段包裹在一種叫做colorImage功能):
p = Process(target=colorImage, args=(hipo,lopo,tridex,ppTris))
p.start()
p.join()
但我立即得到一個破碎的管道錯誤。
是否線程不允許設置新值?我還沒有完全檢查,但我確實相信線程不會嘗試寫入相同的像素。在同一時間做平均計算和寫作應該會使我希望看到的大幅提速。 – Bill
這也會起作用,但我從來沒有在線程上使用共享變量。只要你只是設置像素,你應該沒問題。是的,這也會給你一個更大的加速。看到我爲示例提供的SO鏈接。 – Will
我似乎無法並行運行簡單的函數。你知道爲什麼一個腳本(在IDLE中運行)可以串行運行,甚至在使用並行模塊時也是如此?我的電腦上可能有一些限制IDLE可以使用多少線程的設置? – Bill