如果你有一個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地塊......但如果我這樣做會很棒!)感謝帝斯曼 –