[英]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.