我有一个包含标签的numpy数组。我想根据每个标签的大小和边界框计算一个数字。如何编写更有效率的代码,以便在大型数组(约15000个标签)上使用?
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
有多大? - Sven Marnachmyfunc
,可以通过将y0、x0、y1、x1保存在单独的数组中并脱离循环只调用一次来实现并行化。否则,如果速度真的很重要,你可能需要考虑是否值得编写一些C代码。我发现使用cython处理numpy数组非常舒适。 - David Zwickerargwhere
调用是致命的。 - ajwood