如果你有一个dset
这样,和你想只得到1
值,你可以使用nonzero
,其中“返回数组的一个元组,一个为a
每个维度,包含非零的索引该维度中的元素。“
例如,我们可以做一个简单的3D阵列:
>>> import numpy
>>> numpy.random.seed(29)
>>> d = numpy.random.randint(0, 2, size=(3,3,3))
>>> d
array([[[1, 1, 0],
[1, 0, 0],
[0, 1, 1]],
[[0, 1, 1],
[1, 0, 0],
[0, 1, 1]],
[[1, 1, 0],
[0, 1, 0],
[0, 0, 1]]])
,并找到其中的非零元素位于:
>>> d.nonzero()
(array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2]), array([0, 0, 1, 2, 2, 0, 0, 1, 2, 2, 0, 0, 1, 2]), array([0, 1, 0, 1, 2, 1, 2, 0, 1, 2, 0, 1, 1, 2]))
>>> z,x,y = d.nonzero()
如果我们想要一个更复杂的剪裁,我们可以做像(d > 3.4).nonzero()
之类的东西,因为True的整数值为1并且计数为非零。
最后,我们绘制:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, -z, zdir='z', c= 'red')
plt.savefig("demo.png")
给
美丽。我有一个关于'(d> 3.4).nonzero()'部分的问题,那只会返回d的值大于3.4的地方吗? – pter
@pter:完全正确。 '(d> 3.4)'给出一个布尔数组,其形式与''d'具有相同的形状,其中在其他地方入口> 3.4和'False'。 – DSM
甜蜜我不知道这件事(通常不需要3D地块......但如果我这样做会很棒!)感谢帝斯曼 –