我有一个numpy数组:
np.arange(1, 366)
我有2个值:355
和129
。我想找到哪一个与该数组中的数字最接近的值,比如36
。
在这种情况下,答案将为355
,因为我希望数组滚动,即365 is followed by
1`。
我可以通过使用多个if else条件来做到这一点,是否有更多的pythonic解决方案?
答案 0 :(得分:1)
import numpy as np
aa=np.arange(1, 366)
bb=np.array([355, 136, 155,154 ])
c=36
def short(bb,c):
x0= np.min(np.abs(bb-c))
x1= np.min(np.abs(366-bb+c))
if x0<x1:
return bb[np.argmin(bb-c)]
else:
return bb[np.argmin(366-bb+c)]
bb=np.array([355, 136, 155,154 ])
print short(bb,c)
bb=np.array([355, 136, 155,154,38])
print short(bb,c)
输出:
355
38
答案 1 :(得分:1)
我利用Polar坐标数学来解决这个问题:
import numpy as np
array = [355,129]
target = 36
def distance(list_of_points, target):
options = {}
for point in list_of_points:
distance = np.sqrt(1+1-(2*1)*(np.cos(np.deg2rad(target - point))))
print distance
if point not in options:
options[distance] = point
return options[min(options)]
print distance(array,target)
输出:
355