numpy中三维阵列的二维切片序列

2024-09-26 18:16:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个三维数组,表示笛卡尔空间上的密度值。要获得二维图像,我只需使用sum(array,2)对其中一个轴求和,然后使用matplotlib函数imshow(array2D)获得二维图像。

我想做的是使用imshow()一次只显示3D数组的一个片段,这样我就可以在3D数组中“翻页”以查看图像的不同点。

slice命令很简单:array[:,:,x],但我看不到一次显示每个切片的方法。除了每次手动更改程序文件外,有人有其他建议吗?这能以某种方式交互完成吗?


Tags: 函数图像命令matplotlib空间切片slice数组
1条回答
网友
1楼 · 发布于 2024-09-26 18:16:02

实际上,我编写代码是为了做我认为您正在寻找的事情,看看这是否有帮助:

import numpy as np
import pylab

class plotter:
    def __init__(self, im, i=0):
        self.im = im
        self.i = i
        self.vmin = im.min()
        self.vmax = im.max()
        self.fig = pylab.figure()
        pylab.gray()
        self.ax = self.fig.add_subplot(111)
        self.draw()
        self.fig.canvas.mpl_connect('key_press_event',self)

    def draw(self):
        if self.im.ndim is 2:
            im = self.im
        if self.im.ndim is 3:
            im = self.im[...,self.i]
            self.ax.set_title('image {0}'.format(self.i))

        pylab.show()

        self.ax.imshow(im, vmin=self.vmin, vmax=self.vmax, interpolation=None)


    def __call__(self, event):
        old_i = self.i
        if event.key=='right':
            self.i = min(self.im.shape[2]-1, self.i+1)
        elif event.key == 'left':
            self.i = max(0, self.i-1)
        if old_i != self.i:
            self.draw()
            self.fig.canvas.draw()


def slice_show(im, i=0):
    plotter(im, i)

只要调用3d数组上的show函数,我就会告诉它要显示哪个片段。只要选择了绘图,就可以使用箭头键单步执行切片。

注意,这需要具有形状(x,y,z)的数组,例如,可以从具有np.dstack((im1,im2,…)的一系列2d数组中获取这样的数组。

另请参见Interactive matplotlib plot with two sliders,以获取使用gui滑块执行此操作的代码示例

相关问题 更多 >

    热门问题