过滤numpy meshgrid

时间:2013-03-31 19:23:56

标签: python multidimensional-array numpy filter

我想过滤numpy meshgrid的值:

X,Y = np.mgrid[-10:10,-10:10]

在这种情况下,我想删除x**2 + y**2 <= 2的所有坐标。但是,当我尝试直接过滤数组时,例如

filter(lambda x,y: x**2 + y**2 >= 2, np.meshgrid[-10:10,-10:10])

我得到错误,因为我没有正确处理数组的结构。

任何有关做到这一点的提示都将不胜感激!

2 个答案:

答案 0 :(得分:2)

X,Y = np.mgrid[-10:10,-10:10]
idx = (X**2 + Y**2 > 2)
X, Y = X[idx], Y[idx]

问题在于你不再拥有2D数组,这可能是像matplotlib这样的问题。


看到你自己的答案,并且你基本上想要用不满足条件的0条目替换它,它可能会更干净,更有效率:

idx = X**2 + Y**2 > 2
X[~idx] = 0
Y[~idx] = 0

答案 1 :(得分:2)

我能够通过单独过滤每个数组来实现我需要使用numpy.where的结果,但是在where条件下引用它们:

X,Y = np.mgrid[-10:10,-10:10]
X,Y = np.where(X**2 + Y**2 > 2, X, 0), np.where(X**2 + Y**2 > 2, Y, 0)

这导致新的2D数组,这是我对matplotlib所需要的。感谢所有花时间看这个问题的人!