我有一個包含標籤的numpy數組。我想根據其大小和邊界框爲每個標籤計算一個數字。我怎樣才能更有效地編寫這個文件,以便在大型數組(〜15000個標籤)上使用它是現實的?如何提高這個numpy循環的效率
A = array([[ 1, 1, 0, 3, 3],
[ 1, 1, 0, 0, 0],
[ 1, 0, 0, 2, 2],
[ 1, 0, 2, 2, 2]])
B = zeros(4)
for label in range(1, 4):
# get the bounding box of the label
label_points = argwhere(A == label)
(y0, x0), (y1, x1) = label_points.min(0), label_points.max(0) + 1
# assume I've computed the size of each label in a numpy array size_A
B[ label ] = myfunc(y0, x0, y1, x1, size_A[label])
真實用例中的A'有多大? –
球場7000x9000 – ajwood
你有沒有做一些分析,看看你的哪些言論是減慢你的言論?也許它是'myfunc'函數,它可能通過將單獨數組中的y0,x0,y1,x1保存在循環中並僅調用一次函數來實現並行化。否則,如果速度真的很重要,你可能需要考慮是否值得做一些C代碼。在使用numpy數組時,我發現cython非常舒適。 –