如果我有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]])
Run Code Online (Sandbox Code Playgroud)
现在我想获得界限
array([[ True, True, True, True],
[ True, False, False, True],
[ True, False, False, True],
[ True, True, True, True]])
Run Code Online (Sandbox Code Playgroud)
如果效率很高并适用于任意数量的维度,但它必须至少工作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)
Run Code Online (Sandbox Code Playgroud)
你可以通过构造一个切片元组来做到这一点,例如
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)
Run Code Online (Sandbox Code Playgroud)