我有一个很大的3D,N x N x N的numpy数组,数组中的每个索引都有一个值。
我希望能够使用中心点从数组中获取立方体切片:
def take_slice(large_array, center_point):
...
return cubic_slice_from_center为了说明,我希望cubic_slice_from_center返回以下形状,其中slice11是用于生成切片的中心点的值:
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函数为点(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做这件事最好的方法是什么?
发布于 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数组中进行切片的方法
https://stackoverflow.com/questions/62725092
复制相似问题