I have a multi-dimension array in Numpy with boolean values. In my case, it is a cube.
I would like to know the maximal dimension of a the smallest rectangular box containing all the True values. In other words, that would be the maximum distance on any axis between True values.
For example, if I have the following array
np.array([[
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
], [
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
], [
[False, False, False, False, False],
[False, False, False, True, False],
[False, False, True, True, False],
[False, True, True, True, False],
[False, True, False, False, False],
], [
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
], [
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
]])
it would return 4 because we have a distance of 4 vertically in this "box" (or a distance of 4 between the bottom-left and upper-right values):
...
[False False True]
[False True True]
[ True True True]
[ True False False]
...
I was thinking of the following but that sounds redundant, repetitive, and costly... and actually not exactly working :)
from itertools import product
max_1 = max(sum(cube[:, i, j]) for i, j in product(range(3), range(3)))
max_2 = max(sum(cube[i, :, j]) for i, j in product(range(3), range(3)))
max_3 = max(sum(cube[i, j, :]) for i, j in product(range(3), range(3)))
# ... and then
max_dim = max(max_1, max_2, max_3)
Any suggestion?