绘制 3 维 numpy 数组

Plotting a 3-dimensional numpy array

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

\现在\我想得到这个数组的 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')

请向我推荐任何比这更快的方法。

另外,请注意我并不是要绘制数组中的条目。我的数组中的条目只是一个条件,告诉我是否应该根据某些索引进行绘制。

非常感谢

您可以使用 numpy.where.

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

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