一个n维数组有2^n个面(一个一维数组有2个端点; 一个二维数组有4条边或边缘; 一个三维数组有6个二维面; 一个四维数组有8个边; 以此类推)。这类似于抽象的n维立方体。
我想检查n维数组的所有面是否由零组成。以下是三个面由零组成的数组示例:
# 1D
np.array([0,1,2,3,0])
# 2D
np.array([[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 2, 3, 0],
[0, 0, 1, 0],
[0, 0, 0, 0]])
# 3D
np.array([[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]],
[[0, 0, 0, 0],
[0, 1, 2, 0],
[0, 0, 0, 0]],
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]])
我怎样才能检查一个多维numpy数组的所有边缘是否都是由零组成的数组?例如,对于一个简单的2维数组,我可以这样做:
x = np.random.rand(5, 5)
assert np.sum(x[0:, 0]) == 0
assert np.sum(x[0, 0:]) == 0
assert np.sum(x[0:, -1]) == 0
assert np.sum(x[-1, 0:]) == 0
虽然这种方法适用于二维情况,但它不适用于更高的维度。我想知道是否有一些巧妙的numpy技巧可以在此处使用,使其更有效率和可维护性。