1 回答
TA贡献1886条经验 获得超2个赞
假设您的字段覆盖了相同大小的条柱,则无需显式定义条柱。 可以从简单的楼层划分确定每个位置,因为您知道每个箱子的大小。我建议使用总宽度(您传入的内容),而不是,如果您当然知道范围的预期大小。mask*_bin_idx1 / N1 - 0np.random.uniformx.max() - x.min()
x0 = 0 # or x.min()
x1 = 1 # or x.max()
x_bin = (x1 - x0) / N
x_bin_idx = ((x - x0) // x_bin).astype(int)
# ditto for y
这将比数字化更快,更简单,并且可以避免在开始时出现额外的箱子。
对于大多数目的,您不需要 。90%的问题(包括这个问题)不应该使用。如果您想要一种快速访问 和 的必要元素的方法,只需使用布尔掩码即可。面具很简单np.wherewherexy
selction = mask[x_bin_idx, y_bin_idx].astype(bool)
如果已经是布尔值(无论如何都应该是布尔值),则表达式就足够了。它会产生一个大小与 和 相同(与 和 大小相同的)数组,其中包含每个点的掩码值。您可以将面罩用作maskmask[x_bin_idx, y_bin_idx]x_bin_idxy_bin_idxxy
x[selection] # Elements of x in mask
y[selection] # Elements of y in mask
如果你绝对需要整数索引,那么门槛不是你最好的选择。where
indices = np.flatnonzero(selection)
或
indices = selection.nonzero()[0]
如果您的目标只是从 中提取值,我建议将它们堆叠到单个数组中:xy
coords = np.stack((x, y), axis=1)
这样,您不必应用索引两次,只需提取值即可
coords[selection, :]
或
coords[indices, :]
根据 和 的相对密度,布尔掩码或线性索引可能更快。你将不得不对一些相关的案例进行计时,以获得更好的直觉。maskxy
添加回答
举报