好的,我觉得应该有一个简单的方法来使用matplotlib创建一个三维散点图。我有一个3D numpy数组(dset
),其中0是我不想要的点,1是我想要的点,基本上现在要绘制它,我必须通过三个for:
循环:
for i in range(30):
for x in range(60):
for y in range(60):
if dset[i, x, y] == 1:
ax.scatter(x, y, -i, zdir='z', c= 'red')
有什么建议可以让我更有效率地完成这件事吗?任何想法将不胜感激。
2条答案
按热度按时间cgfeq70w1#
如果你有一个类似的
dset
,你只想得到1
的值,你可以使用nonzero
,它“返回数组元组,a
的每个维度一个,包含该维度中非零元素的索引。“.例如,我们可以创建一个简单的3D数组:
并找出非零元素的位置:
如果我们想要一个更复杂的cut,我们可以做一些像
(d > 3.4).nonzero()
之类的事情,因为True的整数值为1,并且计数为非零。最后,我们绘制:
给予
zvms9eto2#
如果你想避免使用
nonzero
选项(例如,如果你有一个3D numpy数组,其值应该是数据点的颜色值),你可以做你所做的,但通过使用ndenumerate
保存一些代码行。您的示例可能会变成:
我想关键是你不需要嵌套for循环来迭代多维numpy数组。