让我们以3D阵列为例.或者是一个易于可视化的立方体.
我想选择那个立方体的所有面孔.我想将其概括为任意维度.
我还想在多维数据集中添加/删除面(长方体),并将其推广到任意维度.
我知道,对于每个固定数量的维度,你可以做数组[:,:,0],数组[-1,]我想知道如何推广到任意维度以及如何轻松迭代所有面.
最佳答案
得到一张脸:
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]
要添加面部(未经测试):
def add_face(M,new_face,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)
要删除一张脸:
def remove_face(M,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]
迭代所有面孔:
def iter_faces(M):
for dim in range(M.ndim):
for front_side in (True,False):
yield get_face(M,front_side)
一些快速测试:
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]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。