Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中三维数组的任意切片_Python_Arrays_Slice - Fatal编程技术网

Python中三维数组的任意切片

Python中三维数组的任意切片,python,arrays,slice,Python,Arrays,Slice,我将三维体积数据存储在三维数组中,背景值为0,体积值为1。 现在我想得到这个体积的任意剖面。我在这里读到了答案: 但似乎接受的答案是错误的,它生成xoy平面的映射坐标,而不是切片坐标。 那么如何获得切片平面的正确形状呢?是否有将贴图形状转换为原始形状的方法? 谢谢 该问题可能已经过时,但看起来fromscipy.ndimage可能会解决您的问题 scipy.ndimage.interpolation.rotate所做的是将整个3d阵列围绕3个轴中的任一轴旋转一定角度,将存储的值插值到新的“单元”

我将三维体积数据存储在三维数组中,背景值为0,体积值为1。 现在我想得到这个体积的任意剖面。我在这里读到了答案:

但似乎接受的答案是错误的,它生成xoy平面的映射坐标,而不是切片坐标。 那么如何获得切片平面的正确形状呢?是否有将贴图形状转换为原始形状的方法?
谢谢

该问题可能已经过时,但看起来from
scipy.ndimage
可能会解决您的问题

scipy.ndimage.interpolation.rotate
所做的是将整个3d阵列围绕3个轴中的任一轴旋转一定角度,将存储的值插值到新的“单元”。它还相应地调整(扩展)新数组的大小,用指定的值填充新的空单元格。在这之后,您可以像平常一样获取切片,比如说:
array[:,sy//2,:]

简而言之,这是一个围绕平行于z轴的对角线的中心切口(为简单起见):

sz,sy,sx=array.shape
数组[:,sy//2,:]#这是x-z平面上的一个切口。。。
# ... 穿过y轴的中间
#绕z轴旋转45度。。。
# ... `(2,1)`is`(x,y)`定义了旋转平面
数组_rotated=scipy.ndimage.interpolation.rotate(数组,角度=45,轴=(2,1))
sz,sy,sx=阵列形状
#现在你会注意到'sz'是一样的。。。
# ... 但是'sx'和'sy'增加了,因为对角线更长
数组_旋转[:,sy//2,:]#此切片现在位于新的x'-z'平面中。。。
# ... 但就原始数组而言。。。
# ... 它沿着z穿过x-y的对角线
实际上,您可以进一步思考,通过绕不同的轴旋转几次,将其扩展到任意切片


注:如果您觉得需要花费太多时间,可以通过传递
order=0
(默认值为
order=3
)来牺牲插值质量。这将运行得更快。

您是指python意义上的“切片”(使用下标,例如选择平行于其中一个轴的3d阵列的2D子阵列),还是指沿平面插值体积数据时的切片(平面不一定平行于任何轴)?其中第一个要比第二个简单得多second@Alex对不起,对不起,我没有很好地表达我的问题。实际上问题应该是第二种情况,插值方法是必要的。