我有一个包含布尔值的Numpy多维数组。在我的情况下,它是一个立方体。
我想知道包含所有True
值的最小矩形框的最大尺寸。换句话说,这将是任何轴上的True
值之间的最大距离。
例如,如果我有以下数组:
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],
]])
如果我们在这个“盒子”中垂直距离为4,或者在左下和右上值之间的距离为4,那么它将返回4:
...
[False False True]
[False True True]
[ True True True]
[ True False False]
...
我在思考以下方案,但这听起来很冗余、重复且昂贵...实际上并没有完全发挥作用 :)
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)
有什么建议吗?
nonzero
返回的索引来绕过推导式:(np.ptp(np.stack(np.nonzero(np.arange(12).reshape(3, 4))), axis=1) + 1).max()
- Mad Physicistnp.ptp
真是美妙无比! - Jean-Francois T.