Ho rimodellato l'array e poi ho iterato. Sfortunatamente, la mia risposta presuppone che tu abbia almeno tre dimensioni e sbaglierà per le matrici normali, dovresti aggiungere una clausola speciale per le matrici a forma 1 e 2 dimensionale. Inoltre, questo sarà lento, quindi ci sono probabilmente soluzioni migliori.
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
Che produrrà
>>> False
>>> True
Fondamentalmente impilo tutte le dimensioni una sopra l'altra e poi guardo attraverso di esse per controllare i loro bordi.
np.all (x[:, 0] == 0)
sarebbe più sicuro della somma? Il test di somma è corretto solo se tutti i numeri sono positivi.