在numpy数组中查找最接近给定值的索引。限制为外部索引

时间:2017-06-23 14:27:12

标签: python numpy

我有一个名为directions的数组如下:

[[ 315.    326.31  341.57    0.     18.43   33.69   45.  ]
[ 303.69  315.    333.43    0.     26.57   45.     56.31]
[ 288.43  296.57  315.      0.     45.     63.43   71.57]
[ 270.    270.    270.      0.     90.     90.     90.  ]
[ 251.57  243.43  225.    180.    135.    116.57  108.43]
[ 236.31  225.    206.57  180.    153.43  135.    123.69]
[ 225.    213.69  198.43  180.    161.57  146.31  135.  ]]

我想搜索数组并找到给定值(例如45)中最接近值的索引。这是我到目前为止所做的:

x = np.abs(directions-45)
idx = np.where(x == x.min())

这很有效,因为它返回满足此条件的所有索引。但是,我想将返回的索引限制为仅在数组外边缘上的索引,即顶行和底行以及最左右列。如果一个数字更接近不在外边缘的给定值,那么我想扩展搜索,直到找到外边缘上最接近的数字。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以添加

x[1:-1, 1:-1] = x.max()+1

在找到idx之前,用高于任何边值的值覆盖中心的值。

x = np.abs(directions-45)
x[1:-1, 1:-1] = x.max()+1
idx = np.where(x == x.min())
idx
Out[25]: (array([0], dtype=int64), array([6], dtype=int64))