代码之家  ›  专栏  ›  技术社区  ›  Rebel

如何隔离具有受约束高度的三维曲面的区域?

  •  0
  • Rebel  · 技术社区  · 6 年前

    我有一个2变量离散函数,通过以下代码行以元组的形式表示:

    hist_values, hist_x, hist_y = np.histogram2d()
    

    在那里你可以想到 非平滑三维曲面 具有 hist\u值 是边坐标为的网格处曲面的高度( hist\u x ,则, 历史(hist\u y) )。

    现在,我想收集这些网格 hist\u值 高于一些 门槛 数量

    1 回复  |  直到 6 年前
        1
  •  1
  •   norok2    6 年前

    您可以简单地比较 hist_values 使用 threshold ,这将为您提供一个掩码,作为 bool 可用于切片,例如:

    import numpy as np
    
    # prepare random input
    arr1 = np.random.randint(0, 100, 1000)
    arr2 = np.random.randint(0, 100, 1000)
    
    # compute 2D histogram
    hist_values, hist_x, hist_y = np.histogram2d(arr1, arr2)
    
    mask = hist_values > threshold  # the array of `bool`
    hist_values[mask]  # only the values above `threshold`
    

    当然,这些值随后会收集到一个展平的数组中。 或者,您也可以使用 mask 实例化遮罩数组对象(使用 numpy.ma ,有关详细信息,请参阅文档)。

    如果在发生这种情况的坐标之后,应该使用 numpy.where()

    # i0 and i1 contain the indices in the 0 and 1 dimensions respectively
    i0, i1 = np.where(hist_values > threshold)
    
    # e.g. this will give you the first value satisfying your condition
    hist_values[i0[0], i1[0]]
    

    对于 hist_x hist_y 您应该注意,这些是箱子的边界,而不是中值,因此您可以使用它的下限或上限。

    # lower edges of `hist_x` and `hist_y` respectively...
    hist_x[i0]
    hist_y[i1]
    
    # ... and upper edges
    hist_x[i0 + 1]
    hist_y[i1 + 1]
    
    推荐文章