用numpy有效地找到最低点

2024-04-25 06:29:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这里的应用程序正在寻找“云基础”,但原则适用于任何地方。我有一个numpy掩蔽的三维数组(我们会说它对应于一个具有尺寸z,y,x的三维网格盒),其中我用小于0.1的值掩蔽了所有点。我想找到的是,在每个x,y点,什么是没有被掩盖的最低z点索引(不是z中的最低值,最小的z坐标)。我可以想出一些琐碎的方法,例如:

for x points:
    for y points:
        minz=-1
        for z points:
            if x,y,z is not masked:
                 minz = z 
                 break

然而,这似乎真的很低效,我相信有一个更有效或更python的方式来做这件事。我错过了什么?你知道吗

编辑:我不需要使用掩蔽数组,但这似乎是问这个问题的最简单方法-我可以在不使用掩蔽数组的情况下找到某个阈值下的最低点。你知道吗

编辑2:我想要的想法(以z=0为最低点):

input:
[[[0,1],
  [1,5]],

 [[3,3],
  [2,4]],

 [[2,1],
  [4,9]]]

threshold: val >=3
output:
[[1,1],
 [2,0]]

Tags: 方法numpy应用程序网格编辑for尺寸地方
1条回答
网友
1楼 · 发布于 2024-04-25 06:29:22

假设A作为输入数组,您可以-

np.where((A < thresh).all(0),-1,(A >= thresh).argmax(0))

样本运行

运行#1:

In [87]: A
Out[87]: 
array([[[0, 1],
        [1, 5]],

       [[3, 3],
        [2, 4]],

       [[2, 1],
        [4, 9]]])

In [88]: thresh = 3

In [89]: np.where((A < thresh).all(0),-1,(A >= thresh).argmax(0))
Out[89]: 
array([[1, 1],
       [2, 0]])

运行#2:

In [82]: A
Out[82]: 
array([[[17,  1,  2,  3],
        [ 5, 13, 11,  2],
        [ 9, 16, 11, 19],
        [11, 16,  6,  3],
        [15,  9, 14, 14]],

       [[18, 19,  5,  8],
        [13, 13, 17,  2],
        [17, 12, 16,  0],
        [19, 14, 12,  5],
        [ 7,  8,  4,  7]],

       [[10, 12, 11,  2],
        [10, 18,  6, 15],
        [ 4, 16,  0, 16],
        [16, 18,  2,  1],
        [10, 19,  9,  4]]])

In [83]: thresh = 10

In [84]: np.where((A < thresh).all(0),-1,(A >= thresh).argmax(0))
Out[84]: 
array([[ 0,  1,  2, -1],
       [ 1,  0,  0,  2],
       [ 1,  0,  0,  0],
       [ 0,  0,  1, -1],
       [ 0,  2,  0,  0]])

相关问题 更多 >