Numpy数据点区域/圆圈

时间:2014-12-04 19:40:50

标签: python numpy where geometry

我有一个numpy数组 dat ,其中包含稍后绘制的x / y值:

[
    [1 2 3 4 5]
    [2 4 6 8 10]
]

dat [0] 保存x值, dat 1 包含相应的y值。

现在我想知道哪些数据点在特定范围内有邻居(例如5), 所以我做了以下,例如对于点0(x = 1,y = 2):

numpy.where(
    (dat[0] > dat[0][0] - 5)
    &
    (dat[0] < dat[0][0] + 5)
    &
    (dat[1] > dat[1][0] - 5)
    &
    (dat[1] < dat[1][0] + 5)
)

这有效,但指定的范围/区域是一个大小为10x10的正方形,我想拥有 一个圆圈。

我的下一次尝试是使用点之间的向量过滤数据(向量长度必须小于5),这可以很好地处理两点,但我无法找到正确的numpy.where语句。< / p>

只有两点:

math.sqrt( (x_p1 - x_p2)**2 + (y_p1 - y_p2)**2 ) < 5

但是等效的numpy.where会是什么样子? 我想在整个阵列上执行此操作,而不是一遍又一遍地执行此操作。

想象并希望澄清问题

enter image description here

p1是我的数据中的一个点,我希望获得半径为5的圆圈中的所有绿点,应该过滤红点。

以上带有向量长度的解决方案只实现了两点,我希望这可以在整个数组上工作,这样我就可以用numpy.where循环来获取所有邻居&lt; 5表示阵列中的每个点。

1 个答案:

答案 0 :(得分:1)

您可以使用复数编写并使用abs,然后使用for循环和广播:

a=np.array([1,2,3,4,5])
b=np.array([6,7,8,9,10])
c=[np.complex(x,y) for x,y in zip(a,b)] 

for x in c:
    c[np.abs(c-x)<5]

或者如果你想要坐标而不是值:

for x in c:
    np.where(np.abs(c-x)<5)