Tôi có một mảng có chứa các nhãn sần. Tôi muốn tính toán số cho mỗi nhãn dựa trên kích thước và khung giới hạn của nó. Làm thế nào tôi có thể viết này hiệu quả hơn để nó thực tế để sử dụng trên mảng lớn (~ 15.000 nhãn)?Làm cách nào tôi có thể cải thiện hiệu quả của vòng lặp cố định này
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])
Làm thế nào lớn là 'A' trong trường hợp sử dụng thực tế? –
Ballpark 7000x9000 – ajwood
Bạn đã thực hiện một số thông tin để xem câu nào trong số các phát biểu của bạn là câu hỏi làm bạn chậm lại? Có lẽ đó là chức năng 'myfunc' có thể có thể được parallized bằng cách tiết kiệm y0, x0, y1, x1 trong mảng riêng biệt nhận được ra khỏi vòng lặp và chỉ gọi chức năng một lần. Nếu không, nếu tốc độ thực sự đếm, bạn có thể muốn xem xét liệu nó có đáng làm một số mã C hay không. Tôi thấy cython thực sự thoải mái khi làm việc với các mảng numpy. –