我有一个名为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())
这是可行的,因为它会返回满足此条件的所有索引。但是,我希望将返回的索引限制为数组外边缘上的索引,即顶部和底部的行,以及最右边和最左边的列。如果一个数字更接近于不在外部边缘的给定值,那么我想扩大搜索范围,直到找到外部边缘上最接近的数字。
谢谢!
发布于 2017-06-23 15:14:57
您可以添加下面这行
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))
https://stackoverflow.com/questions/44723847
复制