【发布时间】:2015-03-13 13:18:02
【问题描述】:
假设我有一个像这样的 4d numpy 数组:my_array[x,y,z,t]。
有没有一种简单的方法可以将整个数组加载到 Mayavi 中,并且只需选择我想要调查的 t?
我知道可以为数据制作动画,但我想“随时随地”旋转我的人物。
【问题讨论】:
标签: python numpy multidimensional-array mayavi
假设我有一个像这样的 4d numpy 数组:my_array[x,y,z,t]。
有没有一种简单的方法可以将整个数组加载到 Mayavi 中,并且只需选择我想要调查的 t?
我知道可以为数据制作动画,但我想“随时随地”旋转我的人物。
【问题讨论】:
标签: python numpy multidimensional-array mayavi
可以通过输入框设置对话,在其中可以设置t。
你必须使用 traits.api,它可能看起来像这样:
from traits.api import HasTraits, Int, Instance, on_trait_change
from traitsui.api import View, Item, Group
from mayavi.core.ui.api import SceneEditor, MlabSceneModel, MayaviScene
class Data_plot(HasTraits):
a = my_array
t = Int(0)
scene = Instance(MlabSceneModel, ())
plot = Instance(PipelineBase)
@on_trait_change('scene.activated')
def show_plot(self):
self.plot = something(self.a[self.t]) #something can be surf or mesh or other
@on_trait_change('t')
def update_plot(self):
self.plot.parent.parent.scalar_data = self.a[self.t] #Change the data
view = View(Item('scene', editor=SceneEditor(scene_class=MayaviScene),
show_label=False),
Group('_', 't'),
resizable=True,
)
my_plot = Data_plot(a=my_array)
my_plot.configure_traits()
如果您愿意,也可以使用命令Range 而不是Int 来设置滑块。
【讨论】:
t = Int(0) 返回一个特征对象,这使得它无法用于对名为 a 的 numpy 数组进行切片。另外:self.a 似乎不是一个可能的电话,而是self.plot = something(self.a[t]) 中的a。如果有一个 something() 函数的例子也很好。
from mayavi.mlab import mesh 并将函数从something 更改为mesh 将首先导致一个空图,然后在开始时是TypeError: grid_source() takes exactly 3 arguments (1 given) ,在更改t 时是AttributeError: 'Data_plot' object has no attribute 'plot'。我同意你的观点,答案应该很笼统,但是有一个开箱即用的例子(很容易改变)会很好:)。