numpy 过滤 2D

numpy filtering 2D

我有一个示例二维 np 数组,如下所示:

x = np.random.normal(loc = -1, scale = 0.2, size = (100, 2))

x.shape
# (100, 2)

# Visualizing the distribution:
plt.scatter(x[:, 0], x[:, 1])
plt.show()

我要筛选值: select 沿 x 轴的所有值小于或等于 -1.3,沿 y 轴的所有值小于或等于 -0.9。基本上就是抓取图中左下方框内的4个点。

这是我的代码:

x[x[:, 0] <= -1.3, x[:, 1] <= -0.9]

但这给出了错误:

IndexError: boolean index did not match indexed array along dimension 1; dimension is 2 but corresponding boolean dimension is 100

您可以使用元素乘积组合两个布尔掩码,然后用它索引 x

>>> x[(x[:, 0] <= -1.3)*(x[:, 1] <= -0.9)]
array([[-1.41242713, -1.0017676 ],
       [-1.30424828, -1.20114282],
       [-1.3234422 , -1.29396616]])

您可以尝试只为和 & 添加运算符,如下所示:

x[(x[:, 0] <= -1.3) & (x[:, 1] <= -0.9)]