Home > Mobile >  Find index of list element with maximum value of specific property
Find index of list element with maximum value of specific property

Time:10-29

This code snippet:

import numpy as np
from skimage.measure import label, regionprops

image = np.array([[1, 1, 0], [1, 0, 0], [0, 0, 2]])
labels = label(image, background=0, connectivity=2)
props = regionprops(labels, image, cache=True)

print(image)
print(np.argmax([p.area for p in props]))

will print:

[[1 1 0]
 [1 0 0]
 [0 0 2]]
0

0 is an index of props element with maximum value of area property. Is there a more direct way of computing it without the need for creating a temporary array in np.argmax([p.area for p in props])? It doesn't have to use NumPy.

CodePudding user response:

What about using regionprops_table?

from skimage.measure import label, regionprops_table

labels = label(image, background=0, connectivity=2)

out = np.argmax(regionprops_table(labels, image, cache=True, properties=['area'])['area'])

Output: 0

CodePudding user response:

Mozway has given you a great solution. I answer here on how to find index of list element with maximum value of specific property without creating a temporary array.

A straightforward method is use a for loop:

maxid = -1
maxarea = -1
for i, p in enumerate(props):
  if p.area > maxarea:
    maxid, maxarea = i, p.area

This can be written in one line using functools.reduce.

import functools
maxid, maxarea = functools.reduce(lambda res, i_p: (i_p[0], i_p[1].area) if i_p[1].area > res[1] else res, enumerate(props), (-1, -1))
  • Related