Przekształciłem tablicę, a następnie wykonałem iterację. Niestety, moja odpowiedź zakłada, że masz co najmniej trzy wymiary i popełnisz błąd w przypadku normalnych matryc, musisz dodać specjalną klauzulę dla tablic o kształcie 1 i 2 wymiarowym. Ponadto będzie to powolne, więc prawdopodobnie są lepsze rozwiązania.
x = np.array(
[
[
[0 , 1, 1, 0],
[0 , 2, 3, 0],
[0 , 4, 5, 0]
],
[
[0 , 6, 7, 0],
[0 , 7, 8, 0],
[0 , 9, 5, 0]
]
])
xx = np.array(
[
[
[0 , 0, 0, 0],
[0 , 2, 3, 0],
[0 , 0, 0, 0]
],
[
[0 , 0, 0, 0],
[0 , 7, 8, 0],
[0 , 0, 0, 0]
]
])
def check_edges(x):
idx = x.shape
chunk = np.prod(idx[:-2])
x = x.reshape((chunk*idx[-2], idx[-1]))
for block in range(chunk):
z = x[block*idx[-2]:(block+1)*idx[-2], :]
if not np.all(z[:, 0] == 0):
return False
if not np.all(z[:, -1] == 0):
return False
if not np.all(z[0, :] == 0):
return False
if not np.all(z[-1, :] == 0):
return False
return True
Który wyprodukuje
>>> False
>>> True
Zasadniczo układam wszystkie wymiary jeden na drugim, a następnie przeglądam je, aby sprawdzić ich krawędzie.
np.all (x[:, 0] == 0)
byłoby bezpieczniej niż suma? Test sumowy jest poprawny tylko wtedy, gdy wszystkie liczby są dodatnie.