在 Python 中绘制 3d 数组的最有效方法是什么?
例如:
volume = np.random.rand(512, 512, 512)
其中数组项表示每个像素的灰度颜色。
以下代码运行速度太慢:
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
volume = np.random.rand(20, 20, 20)
for x in range(len(volume[:, 0, 0])):
for y in range(len(volume[0, :, 0])):
for z in range(len(volume[0, 0, :])):
ax.scatter(x, y, z, c = tuple([volume[x, y, z], volume[x, y, z], volume[x, y, z], 1]))
plt.show()
原文由 Dmitry 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,512x512x512 点的密集网格太多数据无法绘制,这不是从技术角度来看,而是从观察绘图时能够从中看到任何有用的东西。您可能需要提取一些等值面、查看切片等。如果大多数点是不可见的,那么它可能没问题,但是您应该要求
ax.scatter
只显示非零点以使其更快。也就是说,这是您可以更快地完成它的方法。技巧是消除所有 Python 循环,包括隐藏在库中的循环,例如
itertools
。