如何隔离约束高度的三维表面区域?

时间:2018-03-27 05:34:52

标签: numpy where histogram2d

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

hist_values, hist_x, hist_y = np.histogram2d()

你可以想到一个非光滑的3d表面 hist_values 是网格边缘坐标为( hist_x , hist_y )。

现在,我想收集那些 hist_values 高于某个阈值级别的网格。

1 个答案:

答案 0 :(得分:1)

您可以简单地将hist_valuesthreshold进行比较,这会为您提供一个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_xhist_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]