Để có được một khuôn mặt:
def get_face(M, dim, front_side):
if front_side:
side = 0
else:
side = -1
index = tuple(side if i == dim else slice(None) for i in range(M.ndim))
return M[index]
Để thêm một khuôn mặt (chưa được kiểm tra):
def add_face(M, new_face, dim, front_side):
#assume sizes match up correctly
if front_side:
return np.concatenate((new_face, M), dim)
else:
return np.concatenate((M, new_face), dim)
Để loại bỏ một khuôn mặt:
def remove_face(M, dim, front_side):
if front_side:
dim_slice = slice(1, None)
else:
dim_slice = slice(None, -1)
index = tuple(dim_slice if i == dim else slice(None) for i in range(M.ndim))
return M[index]
lặp qua tất cả các khuôn mặt:
def iter_faces(M):
for dim in range(M.ndim):
for front_side in (True, False):
yield get_face(M, dim, front_side)
.210
Một số xét nghiệm nhanh:
In [18]: M = np.arange(27).reshape((3,3,3))
In [19]: for face in iter_faces(M): print face
[[0 1 2]
[3 4 5]
[6 7 8]]
[[18 19 20]
[21 22 23]
[24 25 26]]
[[ 0 1 2]
[ 9 10 11]
[18 19 20]]
[[ 6 7 8]
[15 16 17]
[24 25 26]]
[[ 0 3 6]
[ 9 12 15]
[18 21 24]]
[[ 2 5 8]
[11 14 17]
[20 23 26]]
Nguồn
2013-11-21 22:11:26
Ngoài câu trả lời Bas, một thành ngữ phổ biến trong 'numpy' tiếp cận với một trục tùy ý (ví dụ 'somefunc (somearray, axis = n)') là sử dụng 'swapaxes' để chuyển trục được chỉ định với trục đầu tiên trong mảng, và sau đó hoạt động trên trục đầu tiên của kết quả" hoán đổi ". 'swapaxes' tạo ra một khung nhìn, do đó không có bộ nhớ phụ nào được sử dụng. –