首页 > 解决方案 > 绘制一个 3 维 numpy 数组

问题描述

我有一个形状为 (128,128,384) 的 3d numpy 数组。我们称这个数组为“S”。该数组仅包含二进制值 0 或 1。在此处输入图像描述

\now \我想以这样的方式得到这个数组的3d图,\我有一个索引网格(x,y,z)并且对于S的每个条目,当它是一个\我应该得到一个打印点3d 网格中的相应索引。例如,假设我在 S[120,50,36] 有 1 个条目,所以我应该在网格中的那个点得到一个点。

到目前为止,我已经尝试了很多方法,但是已经能够实现一种非常慢的方法,因此在我的情况下是无用的。该方法是遍历整个数组并使用散点图。\这是我的代码片段:

from numpy import np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
for i in range(0,128):
    for j in range(0,128):
        for k in range(0,384):
            if S[i,j,k]==1:
                ax.scatter(i,j,k,zdir='z', marker='o')

请向我建议任何比这更快的方法。

另外,请注意,我不是在尝试绘制数组中的条目。我的数组中的条目只是一个条件,它告诉我是否应该绘制对应于某些索引的图。

非常感谢

标签: numpymatplotlibscatter-plotnumpy-ndarrayscatter3d

解决方案


您可以使用numpy.where.

在您的示例中,删除 for 循环并使用:

i, j, k = np.where(S==1)
ax.scatter(i,j,k,zdir='z', marker='o')

推荐阅读