如果我有d
维np.array
,我怎样才能得到边界的标记?
例如,在2d,
test = np.arange(16).reshape((4, 4))
test
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
现在我想获得边界
array([[ True, True, True, True],
[ True, False, False, True],
[ True, False, False, True],
[ True, True, True, True]])
如果效率很高并适用于任意数量的维度,但它必须至少工作3.数组不一定是超立方体,但可能是超矩形:所有维度中的网格点数量不一定相同,与示例不同。
对于形状(4, 5, 6)
的数组,预期输出为
array([[[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True]],
[[ True, True, True, True, True, True],
[ True, False, False, False, False, True],
[ True, False, False, False, False, True],
[ True, False, False, False, False, True],
[ True, True, True, True, True, True]],
[[ True, True, True, True, True, True],
[ True, False, False, False, False, True],
[ True, False, False, False, False, True],
[ True, False, False, False, False, True],
[ True, True, True, True, True, True]],
[[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True]]], dtype=bool)
答案 0 :(得分:9)
你可以通过构建一个切片元组来实现这一点,例如
import numpy as np
def edge_mask(x):
mask = np.ones(x.shape, dtype=bool)
mask[x.ndim * (slice(1, -1),)] = False
return mask
x = np.random.rand(4, 5)
edge_mask(x)
# array([[ True, True, True, True, True],
# [ True, False, False, False, True],
# [ True, False, False, False, True],
# [ True, True, True, True, True]], dtype=bool)