3

我想过滤一个 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])

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

任何正确执行此操作的提示将不胜感激!

4

2 回答 2

3

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)

这会产生新的二维数组,这是我对 matplotlib 所需要的。感谢所有花时间看这个问题的人!

于 2013-04-01T03:00:47.990 回答
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
于 2013-03-31T19:37:42.047 回答