gpt4 book ai didi

python - numpy 中 3D 数组的 2D 切片系列

转载 作者:太空狗 更新时间:2023-10-29 21:55:44 24 4
gpt4 key购买 nike

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

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

切片命令很简单:array[:,:,x] 但我看不出有什么办法至少一次显示每个切片。除了每次手动更改程序文件之外,还有其他建议吗?这可以以某种方式交互完成吗?

最佳答案

我实际上写了代码来做我认为你正在寻找的东西,看看这是否有帮助:

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, ...)) 从一系列二维数组中获取这样的数组。

另见 Interactive matplotlib plot with two sliders有关使用 gui slider 执行此操作的代码示例

关于python - numpy 中 3D 数组的 2D 切片系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6620979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com