首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自3D数组的3D切片

来自3D数组的3D切片
EN

Stack Overflow用户
提问于 2020-07-04 11:53:05
回答 1查看 88关注 0票数 0

我有一个很大的3D,N x N x N的numpy数组,数组中的每个索引都有一个值。

我希望能够使用中心点从数组中获取立方体切片:

代码语言:javascript
复制
def take_slice(large_array, center_point):
    ...
    return cubic_slice_from_center

为了说明,我希望cubic_slice_from_center返回以下形状,其中slice11是用于生成切片的中心点的值:

代码语言:javascript
复制
print(cubic_slice_from_center)

array([[[0.32992015, 0.30037145, 0.04947877],
        [0.0158681 , 0.26743224, 0.49967057],
        [0.04274621, 0.0738851 , 0.60360489]],

       [[0.78985965, 0.16111745, 0.51665212],
        [0.08491344, 0.30240689, 0.23544363],
        [0.47282742, 0.5777977 , 0.92652398]],

       [[0.78797628, 0.98634545, 0.17903971],
        [0.76787071, 0.29689657, 0.08112121],
        [0.08786254, 0.06319838, 0.27050039]]])

我研究了几种方法来做到这一点。其中一种方法是:

代码语言:javascript
复制
def get_cubic_slice(space, slice_center_x, slice_center_y, slice_center_z):
    
    return space[slice_center_x-1:slice_center_x+2,
                 slice_center_y-1:slice_center_y+2,
                 slice_center_z-1:slice_center_z+2]

只要立方体切片不在边缘上就可以工作,但是如果它在边缘上,它就会返回一个空数组!

有时,切片的中心点将位于3D numpy数组的边缘。当发生这种情况时,我不想返回任何值,而是希望返回空间边界内的立方体空间切片的值,并且在切片超出边界的地方,用np.nan值填充返回数组。

例如,对于一个20 x 20 x 20的空间,x、y和z轴的索引为0-19,我希望get_cubic_slice函数为点(0,5,5)返回以下类型的结果:

代码语言:javascript
复制
print(get_cubic_slice(space,0,5,5))

array([[[np.nan, np.nan, np.nan],
            [np.nan , np.nan, np.nan],
            [np.nan, np.nan , np.nan]],
    
           [[0.78985965, 0.16111745, 0.51665212],
            [0.08491344, 0.30240689, 0.23544363],
            [0.47282742, 0.5777977 , 0.92652398]],
    
           [[0.78797628, 0.98634545, 0.17903971],
            [0.76787071, 0.29689657, 0.08112121],
            [0.08786254, 0.06319838, 0.27050039]]]) 

用numpy做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-07-04 12:46:23

X= np.arange(27).reshape(3,3,3)

[[ 0 1 2 6 7 8]

[9 10 11 15 16 17]

[18 19 20 24 25 26]

x12

14

x1:,0:2,1:4

[[ 0]

[ 9]

[18]

这是我们如何在3D数组中进行切片的方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62725092

复制
相关文章

相似问题

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