在圆形数组

时间:2016-04-23 20:52:27

标签: python numpy

我有一个numpy数组:

np.arange(1, 366)

我有2个值:355129。我想找到哪一个与该数组中的数字最接近的值,比如36

在这种情况下,答案将为355,因为我希望数组滚动,即365 is followed by 1`。

我可以通过使用多个if else条件来做到这一点,是否有更多的pythonic解决方案?

2 个答案:

答案 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坐标数学来解决这个问题:

enter image description here

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