繁体   English   中英

3D 阵列中的 3D 切片

[英]3D slice from 3D array

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

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

def take_slice(large_array, center_point):
    ...
    return cubic_slice_from_center

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

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]]])

我研究了几种方法来做到这一点。 一种方法如下:

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 function 为点 (0,5,5) 返回以下类型的结果:

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 执行此操作的最佳方法是什么?

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

[[[ 0 1 2] [ 3 4 5] [ 6 7 8]]

[[ 9 10 11] [12 13 14] [15 16 17]]

[[18 19 20] [21 22 23] [24 25 26]]]

x[1][1][2]

14

x[1:, 0:2, 1:4]

[[[0][3]]

[[ 9] [12]]

[[18] [21]]]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM