假设我有以下数组:
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