【问题标题】:Finding the Corners of the an array of coordinates查找坐标数组的角
【发布时间】:2020-06-07 01:38:51
【问题描述】:

我在 Numpy 中有一个二维坐标数组。

我的目标是尝试找到角(就好像它是一个正方形)。所以:

左上角:最小的x,最大的y 右上角:最大x,最大y 左下:最小的x,最小的y 右下:最大的x,最小的y

显然,这些对中的每一对都需要考虑其他值。

我试图根据行取最小值和最大值:

        BottomLeft = np.min(np.min(hull, axis=1), axis=0)

但是,这不会将这对值保持在一起。它必须是可能的最小 X 值,其中最小的 y 值。或类似的东西。 我假设有一种有效的方法可以用 numpy 做到这一点?

这是一个数据示例:

    [[[260 156]]

 [[248 176]]

 [[235 197]]

 [[233 199]]

 [[192 199]]

 [[174 197]]

 [[160 171]]

 [[150 151]]

 [[154 149]]

 [[156 149]]

 [[260 151]]]

谢谢!

【问题讨论】:

  • 你可以使用meshgrid
  • 它是如何工作的?
  • 我不认为这个问题会很好。例如,最左边的点可能不是最高点。您说您首先要找到可能的最小 x 值,然后从中找到最小的 y,但没有理由认为最小的 y 位于最小 x 值的集合中。
  • 如果你有实际的角,你不需要保持坐标配对。绝对最小值和最大值将为您提供您正在寻找的坐标。
  • 提供样本数据并更好地定义约束将有助于获得答案。

标签: python arrays numpy multidimensional-array numpy-ndarray


【解决方案1】:

假设x坐标如下

x = np.arange(0, 22, 2)

假设y坐标如下

y = np.arange(20, 32, 2)

xx, yy = np.meshgrid(x, y)

yy = np.flip(yy, 0)

print(xx)

print(yy)

然后你可以对 xx 和 yy 做任何操作,因为它们是坐标。

例如,

让我们假设 z 是高程

z = np.random.randint(2, high=20, size=(yy.shape[0], yy.shape[1])) # xx can also be used


import matplotlib.pyplot as plt 

plt.contourf(xx, yy, z)
plt.colorbar()

【讨论】:

    【解决方案2】:

    根据上面的讨论,这假设具有最小x 值的一对也将对应于最小y 值。所以你可以先找到最小的x值:

    # Some sample data
    d = np.array([[3, 1, 4, 1, 5],
                  [8, 0, 4, 2, 3]])
    # smallest value in the first row which, I assume, is your x-values
    xm = np.min(d[0, :])
    

    然后您可以像这样获得具有最小x 值的值的子集:

    d[:, d[0,:] == 1]
    

    所以你可以通过以下方式获得它们的最小值:

    np.min(d[1, d[0,:] == 1])
    

    【讨论】:

    • 您刚刚更新了您的问题,并且行和列与我上面的假设相反,但基本想法仍然有效。