Python:对排序数组中的n个数字进行采样,确保它们尽可能远离彼此



假设我有以下数组:

myarr = np.array([0, 4, 3, 6, 12, 9, 17, 86])

并且我需要从该阵列中采样CCD_ 1数字,使得它们的差表示可能的最大差。在我的例子中,我首先将数组从最小到最大排序:

myarr_s = np.sort(myarr) = array([0, 3, 4, 6, 9, 12, 17, 86])

现在,如果是n=2,我会选择0, 86,因为它们的差值是数组中可能的最大差值。我正在寻找一种在n>2

举一个进一步的例子,如果我的数组是np.arange(0,101,1)n=5,那么我的选择必须是0, 25, 50, 75, 100

您可以将排序后的数组拆分为n-1个相等的部分并拾取边。然后在阵列中找到最接近这些边的数字

def foo(a, n): 
_a = np.sort(a) 
ret = np.zeros(n) 
ret[0], ret[-1] = _a[0], _a[-1] 
if n==2: 
return ret 
midvals = [ret[0]+i*(ret[-1]-ret[0])/(n-1) for i in range(1, n-1)] 
def closest(arr, val): 
diff = [abs(v-val) for v in arr] 
return arr[np.argmin(diff)] 
for i,v in enumerate(midvals): 
ret[i+1] = closest(a, v) 
return ret 

最新更新