查找numpy meshgrid上的所有中点值[重复]

wmvff8tz  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(117)

此问题已在此处有答案

How can the Euclidean distance be calculated with NumPy?(25个回答)
8天前关闭
我有一个numpy meshgrid,它在我的图像上勾勒出方框。我想找到每个“盒子”的中点,然后画出一个点。我是这样手动操作的:

xg = np.linspace(0, (x1 - x0), inputx + 1)
yg = np.linspace(0, (y2 - y1), inputy + 1)
xgr, ygr = np.meshgrid(xg, yg)

xpnt, ypnt = ((xgr[1][1] - xgr[0][0]) // 2 + xgr[0][0], (ygr[1][1] - ygr[0][0]) // 2 + ygr[0][0])
circle = plt.Circle((xpnt, ypnt), 5, color='r')
a.add_patch(circle)

这需要我遍历每个点,并为每个中点确定x,y值。有更快的方法吗?我将展示仅一个中点圆的图像输出。

ymdaylpp

ymdaylpp1#

创建一个与您的网格大小相同的网格,但使用更简单的数字:

In [1]: input = 5; 
In [2]: x1 = np.linspace(0,1,input+1)
In [3]: x1
Out[3]: array([0. , 0.2, 0.4, 0.6, 0.8, 1. ])
In [5]: I,J = np.meshgrid(x1,x1,indexing='ij')    
In [6]: I,J
Out[6]: 
(array([[0. , 0. , 0. , 0. , 0. , 0. ],
        [0.2, 0.2, 0.2, 0.2, 0.2, 0.2],
        [0.4, 0.4, 0.4, 0.4, 0.4, 0.4],
        [0.6, 0.6, 0.6, 0.6, 0.6, 0.6],
        [0.8, 0.8, 0.8, 0.8, 0.8, 0.8],
        [1. , 1. , 1. , 1. , 1. , 1. ]]),
 array([[0. , 0.2, 0.4, 0.6, 0.8, 1. ],
        [0. , 0.2, 0.4, 0.6, 0.8, 1. ],
        [0. , 0.2, 0.4, 0.6, 0.8, 1. ],
        [0. , 0.2, 0.4, 0.6, 0.8, 1. ],
        [0. , 0.2, 0.4, 0.6, 0.8, 1. ],
        [0. , 0.2, 0.4, 0.6, 0.8, 1. ]]))

我们可以在每个方向上少一个点来创建一个新的网格:

In [7]: x2 = np.linspace(.1,.9,input)    
In [8]: x2
Out[8]: array([0.1, 0.3, 0.5, 0.7, 0.9])

In [10]: np.meshgrid(x2,x2,indexing='ij')
Out[10]: 
[array([[0.1, 0.1, 0.1, 0.1, 0.1],
        [0.3, 0.3, 0.3, 0.3, 0.3],
        [0.5, 0.5, 0.5, 0.5, 0.5],
        [0.7, 0.7, 0.7, 0.7, 0.7],
        [0.9, 0.9, 0.9, 0.9, 0.9]]),
 array([[0.1, 0.3, 0.5, 0.7, 0.9],
        [0.1, 0.3, 0.5, 0.7, 0.9],
        [0.1, 0.3, 0.5, 0.7, 0.9],
        [0.1, 0.3, 0.5, 0.7, 0.9],
        [0.1, 0.3, 0.5, 0.7, 0.9]])]

或者,我们可以对原始网格中的点进行平均:

In [11]: (I[1:,1:]+I[:-1,:-1])/2
Out[11]: 
array([[0.1, 0.1, 0.1, 0.1, 0.1],
       [0.3, 0.3, 0.3, 0.3, 0.3],
       [0.5, 0.5, 0.5, 0.5, 0.5],
       [0.7, 0.7, 0.7, 0.7, 0.7],
       [0.9, 0.9, 0.9, 0.9, 0.9]])

In [12]: (J[1:,1:]+J[:-1,:-1])/2
Out[12]: 
array([[0.1, 0.3, 0.5, 0.7, 0.9],
       [0.1, 0.3, 0.5, 0.7, 0.9],
       [0.1, 0.3, 0.5, 0.7, 0.9],
       [0.1, 0.3, 0.5, 0.7, 0.9],
       [0.1, 0.3, 0.5, 0.7, 0.9]])

相关问题