首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python在3D数组中裁剪3D数组的最快方法

用Python在3D数组中裁剪3D数组的最快方法
EN

Stack Overflow用户
提问于 2018-11-10 03:40:57
回答 1查看 1.8K关注 0票数 3

我有一个3D数组和一个3D索引列表。我的目标是为每个索引(索引位于卷的中间)分离一个特定大小的小3D卷(3x3x3或5x5x5或其他任何东西)。

目前,我这样做: 1)第五组2D数组(感兴趣的数组位于中间,跟随索引)。所以有一个5xNxN数组。2)对于5x5x5卷,对于我的5xNxN数组的每个2D数组(0,N,N;1,N,N..etc),我在同一索引周围裁剪一个5x5数组。3)堆叠这五个5x52D数组,以获得我的小3D卷。

有最快的方法来做这份工作吗?

这里有一个解释代码:

代码语言:javascript
复制
arr = np.zeros((7,7,7)) #Just a 3D array
ind = [3, 3, 3] #My index
for el in range(arr.shape[0]):
    if el==ind[0]:
        group = arr[el-2:el+3] #it isolates a 3D volume with arr[ind[0]] in the middle
        volume_3d = []
        for i in group:
            volume_2d = i[ind[1]-2:ind[1]+3, ind[2]-2:ind[2]+3]
            volume_3d.append (volume_2d) #it builds the 3D volume

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-10 03:54:00

Numpy很容易支持像这样的切片:

代码语言:javascript
复制
dim = 5
x = dim // 2
i,j,k = ind

volume_3d = arr[i-x:i+(dim-x), j-x:j+(dim-x), k-x:k+(dim-x)].copy()
代码语言:javascript
复制
# Your implementation.
dim = 5
x = dim // 2
arr = np.random.randn(7, 7, 7)
el = ind[0]
group = arr[el-x:el+(dim-x)] 
volume_3d = []
for i in group:
    volume_2d = i[ind[1]-x:ind[1]+(dim-x), ind[2]-x:ind[2]+(dim-x)]
    volume_3d.append (volume_2d)

# Proposed in this post.
i,j,k = ind
volume_3d_2 = arr[i-x:i+(dim-x), j-x:j+(dim-x), k-x:k+(dim-x)]

print(np.array_equal(volume_3d, volume_3d_2))
True
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53235813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档