Nicht sicher, wie Sie damit fortfahren. Ich habe eine Liste von Zahlen (eine Liste von Listen von Zahlen, um genau zu sein), aber diese Zahl haben eine Zweideutigkeit: x, x + 1 und x-1 sind genau das gleiche für mich. Ich möchte jedoch die Varianz der Liste minimieren, indem ich die Elemente ändere. Hier ist, was ich dachte bisher (mit einer Probe-Liste, die ich weiß, dass es nicht funktioniert):Minimieren Sie die Varianz python
import numpy as np
from scipy import stats
lst = [0.474, 0.122, 0.0867, 0.896, 0.979]
def min_var(lst):
mode = np.mean(lst)
var = np.var(lst)
result = []
for item in list(lst):
if item < mean: # not sure this is a good test
new_item = item + 1
elif item > mean:
new_item = item - 1
else:
new_item = item
new_list = [new_item if x==item else x for x in lst]
new_var = np.var(new_list)
if new_var < var:
var = new_var
lst = new_list
return lst
Was die Funktion macht hinzufügen 1 bis 3. Element. Die minimale Varianz tritt jedoch auf, wenn Sie 1 vom 4. und 5. subtrahieren. Dies geschieht, weil ich die Varianz nach jedem Element minimiere und nicht mehrere Änderungen zulasse. Wie könnte ich mehrere Änderungen implementieren, vorzugsweise ohne alle möglichen Lösungen zu betrachten (3 ** n wenn ich mich nicht irre)? Vielen Dank
Sie grundsätzlich minimieren wollen 'var ((X + delta)% 1)' wobei X ist dein Array von Werten. Versuchen Sie es mit einem numerischen Solver wie in "scipy.optimize". Am Ende ist der optimale Bereich, in dem die Zahlen stehen sollen, "Delta" bis "Delta + 1", und Sie können Ganzzahlen aus Ihren Zahlen hinzufügen und entfernen, um sicherzustellen, dass sie alle in diesem Bereich liegen. –
Ich habe mich geirrt, 'scipy.optimize' zu verwenden, aber ich habe eine Lösung geschrieben, die funktioniert. –