Для более общего результата, я думаю, вам следует перенормировать веса таким образом, чтобы сумма каждой пары равнялась 1. Это означает, что каждый вес может иметь разные перенормированные значения в паре с его предыдущим или следующим весом.
Допустим, что weights
- это массив пустых чисел с весами:
normalized_weights = np.column_stack((we[:-1], we[1:]))
for i in range(corrwe.shape[0]):
normalized_weights[i][0] = normalized_weights[i][0] / (weights[i] + weights[i+1])
normalized_weights[i][1] = normalized_weights[i][1] / (weights[i] + weights[i+1])
normalized_weights
- это матрица N x 2, где N равно len(weights)-1
.Каждая строка содержит пару весов, сумма которых равна 1.
Например, если weights = [0.89779725 0.04136924 0.2877373 0.29153165 0.97000642 0.74452243 0.5714133 0.25224212 0.09493403 0.11448254]
, то normalized_weights
равно:
[[0.95595112 0.04404888]
[0.12570165 0.87429835]
[0.49672488 0.50327512]
[0.23109223 0.76890777]
[0.56575684 0.43424316]
[0.56577416 0.43422584]
[0.69375285 0.30624715]
[0.72655372 0.27344628]
[0.45332625 0.54667375]]
Теперь, если x
- это ваш массив данных(такой же длины weights
) вы могли бы получить взвешенные средние точки, выполнив:
weighted_middle_x = x[:-1]*normalized_weights[...,0] + x[1:]*normalized_weights[...,1]