加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 从numpy中的(n)D数组中选择(n-1)D数组

发布时间:2020-12-16 21:48:23 所属栏目:Python 来源:网络整理
导读:让我们以3D阵列为例.或者是一个易于可视化的立方体. 我想选择那个立方体的所有面孔.我想将其概括为任意维度. 我还想在多维数据集中添加/删除面(长方体),并将其推广到任意维度. 我知道,对于每个固定数量的维度,你可以做数组[:,:,0],数组[-1,]我想知道如何推

让我们以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]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读