如果您有一个像这样的
dset
,并且您只想获取
1
值,您可以使用
nonzero
,它“返回一个元组数组,每个维度都包含该维度中非零元素的索引。”。
例如,我们可以创建一个简单的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")
给予
![demo 3d image](https://istack.dev59.com/4BxM6.webp)
(d > 3.4).nonzero()
部分的问题,这会返回 d 中值大于 3.4 的位置吗? - pter(d > 3.4)
会返回一个布尔数组,与d
具有相同的形状,并且在条目> 3.4处为True
,其他地方为False
。 - DSM