首页 > 解决方案 > numpy 过滤 2D

问题描述

我有一个示例 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()

在此处输入图像描述

我想过滤值:选择沿 x 轴小于或等于 -1.3 的所有值以及沿 y 轴小于或等于 -0.9 的所有值。基本上,捕获图左下方方框内的 4 个点。

这是我的代码:

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

但这给出了错误:

IndexError:布尔索引与维度 1 的索引数组不匹配;维度为 2 但对应的布尔维度为 100

标签: pythonpython-3.xnumpynumpy-slicing

解决方案


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

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

推荐阅读