lässt sich ein eigendlich in Python ein Algorithmus schreiben, der Gemeinsamkeiten und Abweichungen, in einer Reihe von Zahlen feststellen kann

Vielen Dank
Code: Alles auswählen
def has_sheme(numbers, condition=lambda x: None):
while len(numbers) >= 2:
x = numbers.pop(0)
y = numbers[0]
if not condition(x) == y:
return False
return True
Code: Alles auswählen
In [74]: has_sheme([2,4,16], lambda x: x**2)
Out[74]: True
In [75]: has_sheme([3,4,16], lambda x: x**2)
Out[75]: False
Solltest mal wieder putzen.mkallas hat geschrieben:Blick in die Kristallkugel lässt numpy und Standardabweichung erscheinen.
Code: Alles auswählen
from itertools import islice, tee
def has_scheme(sequence, condition):
a, b = tee(sequence, 2)
return all(condition(x) == y for x, y in zip(a, islice(b, 1, None)))
Schönen Gruß# Programm zur empirischen Ermittlung von Haeufigkeiten bei einer bestimmten Fragestellung
# Sprache: Python (getestet auf Version 2.4.1 (nur Standartmodule werden verwendet))
import math, time, random, array, operator
# Editierbare Variablen
n = int(math.pow(10,7)) # n ist die Anzahl der *Durchfuehrungen* des Eperiments (hier: 10^7)
#-------------------------------------------------------
start = float(time.time()) # Zur Berechnung der Dauer der Programmdurchfuehrung
pers = int( 4) # Anzahl der Personen
monate = int(12) # Anzahl der Monate
# Die Funktion, die das Zufallsexperiment simuliert
def ZE():
harray = array.array('b') # Ein Hilfsarray fuer die Funktion
global pos
pos = bool(0) # Eine Variable, mit der geprueft wird, ob das Ereignis eintritt
for i in range(pers): # Eine Schleife, die allen Personen einen Geburtsmonat zuteilt
zufall = random.randint(1,monate) # Eine pseudozufaellig generierte Zahl zwischen einschl. 1 und 12
harray.insert(i,zufall)
if (i==1): # Abfragen zum Eintreten des Ereignisses A
if (zufall==harray[0]):
pos = bool(1)
if (i==2):
if (zufall==harray[0] or zufall==harray[1]):
pos = bool(1)
if (i==3):
if (zufall==harray[0] or zufall==harray[1] or zufall==harray[2]):
pos = bool(1)
#-------------------------------------------------------
pos_ges = int(0) # Eine Variable mit der gezaehlt wird, wie oft das Ereignis eintritt
for l in range(n):
ZE()
if pos:
pos_ges = pos_ges+1
P_von_A = float(operator.truediv(pos_ges,n)) # Die Wahrscheinlichkeit
# Optische Praeparation von P(A)
if (P_von_A<1):
P_von_A_str = int(P_von_A*n)
P_von_A_str = str(P_von_A_str)
P_von_A_str = "0,"+P_von_A_str
else:
P_von_A_str = str(P_von_A)
#-------------------------------------------------------
ende = float(time.time()) # Zur Berechnung der Dauer der Programmdurchfuehrung
dauer = float(ende-start) # Berechnung der Dauer der Programmdurchfuehrung
# Ausgabeteil
print "\nDas Ereignis A trat bei "+str(n)+" Durchfuehrungen "+str(pos_ges)+" mal ein."
print "Es ergibt sich die Wahrscheinlichkeit P(A)="+str(pos_ges)+"/"+str(n)+"="+P_von_A_str+"."
print "\n(Die Berechnung dieser Ergebnisse dauerte "+str(dauer)+" Sekunden.)"
Das Problem ist nicht eine Lösung zu finden. Zu jeder Reihe lassen sich da leicht unendlich viele angeben. Die Schwierigkeit ist das finden einer optimalen Lösung (optimal nach irgend einem Kriterium). Und das ist bei diskreten Werten mit unendlich vielen möglichen Lösungen unter Umständen etwas unübersichtlich.Shining-Blue hat geschrieben:Eine allgemeingültige Lösung sollte möglich sein und endet dann wahrscheinlich mit einem DiplomB
Code: Alles auswählen
f(x, i) = ai0 + ai1*x + ai2*x^2 + ai3*x^3 + ai4*....