【问题标题】:Python: Big set of 2D numpy arrays... how to visualize in 3D?Python:大量 2D numpy 数组......如何在 3D 中可视化?
【发布时间】:2013-04-18 19:24:30
【问题描述】:

我有一大组 (100+) 256x256 标量 2D numpy 数组。每个数组基本上是一个 3D 图像的切片,每个数组都是均匀分离的。

我是一个 python 菜鸟...关于如何为这些数据创建漂亮的 3D 可视化的任何提示?

我需要将 100 多个 2D 标量数组编译成更大的 3D 数组吗?

干杯!

【问题讨论】:

  • 首先,您需要找到一个能够进行 3D 可视化的库...然后您按照他们的 API ...

标签: python


【解决方案1】:

您需要向我们提供更多信息,因为您如何将其可视化取决于您想从中获得什么!请注意,这个问题总是会有多个可能的答案,因为您试图在 2D 屏幕上显示本质上是 3D 的信息。

执行此操作的一种方法是create a movie 的 2D“表面”图,然后回放它们。这基本上只是一个接一个地绘制所有切片。

如果您想一次查看所有 3D 数据,您很可能不能,因为我不知道任何用于 Python 的体积绘图工具。可能最接近的是MayaVi

如果您尽可能详细地向我们提供有关您想要完成的任务的更多信息,我们可以为您指出更具体的示例/代码资源。

【讨论】:

  • 谢谢。我选择了 Mayavi,但似乎找不到任何工具来绘制简单的 3D 标量场!
  • 你能解释一下“绘制一个简单的 3d 标量场”是什么意思吗?你能给我们一个可视化的例子来展示你想要什么吗?
【解决方案2】:

不完全确定您希望可视化效果如何?听起来有点像您想要可视化 4D 函数?

您可以在空间中创建一个 3D 网格(例如参见 Numpy meshgrid in 3D),然后使用矩阵/矩阵编号的值来为散点图中的点着色?

如果您能详细说明您想看到的内容,可能会更具体。

编辑:

在您发表评论之后,这听起来仍然非常难以可视化,但我想您可以执行类似的操作(我生成了随机数据,并且大小比您想象的要小得多)

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

(X,Y,Z) = np.mgrid[-10:10:25j, -10:10:25j, -10:10:10j]

col = np.random.rand(25,25,10)

fig = plt.figure(1)
fig.clf()
ax = Axes3D(fig)

ax.scatter(X,Y,Z, c=col)

plt.draw()

plt.show()

导致

注意,这对于非随机数据来说可能没那么无用。

【讨论】:

  • 例如,对于初学者来说,一个半透明的散点图就可以解决问题。我正在使用 numpy.dstack 将数组堆叠到列表中。
  • 仍然有点困惑..不确定这是否容易看到。我已经添加了一个示例,说明您(对我而言)您正在尝试做的事情......
  • 此代码对我不起作用。为了让它运行,我必须调用 flatten() 来调用像这样的分散调用参数:ax.scatter(X.flatten(),Y.flatten(),Z.flatten(), c=col.flatten())
猜你喜欢
  • 2019-09-11
  • 2021-02-19
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2013-08-07
  • 2019-07-10
相关资源
最近更新 更多