ฉันเปลี่ยนรูปร่างอาร์เรย์แล้วทำซ้ำผ่านมัน น่าเสียดายที่คำตอบของฉันถือว่าคุณมีสามมิติอย่างน้อยและจะผิดพลาดสำหรับเมทริกซ์ปกติคุณจะต้องเพิ่มประโยคพิเศษสำหรับ 1 & 2 อาร์เรย์ที่มีรูปร่างมิติ นอกจากนี้สิ่งนี้จะช้าดังนั้นจึงน่าจะมีทางออกที่ดีกว่า
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
ซึ่งจะผลิต
>>> False
>>> True
โดยทั่วไปฉันสแต็คมิติทั้งหมดที่ด้านบนของกันและกันแล้วมองผ่านพวกเขาเพื่อตรวจสอบขอบของพวกเขา
np.all (x[:, 0] == 0)
ปลอดภัยกว่ายอดรวมหรือไม่ การทดสอบผลรวมนั้นถูกต้องเฉพาะในกรณีที่จำนวนทั้งหมดเป็นบวก