Hallo
lässt sich ein eigendlich in Python ein Algorithmus schreiben, der Gemeinsamkeiten und Abweichungen, in einer Reihe von Zahlen feststellen kann ?
Vielen Dank
Abweichung und Gemeinsamkeiten der Zahlen
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Blick in die Kristallkugel lässt numpy und Standardabweichung erscheinen.
Es ist eigendlich eine Liste mit Zahlen, die bestimmte Regelmässigkeiten aufweisen sollen.
Um diese Regelmässigkeiten zu sehen, benötige ich ein Programm, welche diese Regelmässigkeiten erkennt!
Wie bei einem Zahlenrätsel 2,4,16,256......... oder 10,9,7,4,5,7,10.......
Bei ersten Beispiel soll der Algorithmus erkennen, dass sich die Zahlen im Quadrat bewegen.
Im zweiten Beispiel ist der Rechnungsweg -1, -2, -3, +1, +2, +3.........
Danke für die Hilfe
Um diese Regelmässigkeiten zu sehen, benötige ich ein Programm, welche diese Regelmässigkeiten erkennt!
Wie bei einem Zahlenrätsel 2,4,16,256......... oder 10,9,7,4,5,7,10.......
Bei ersten Beispiel soll der Algorithmus erkennen, dass sich die Zahlen im Quadrat bewegen.
Im zweiten Beispiel ist der Rechnungsweg -1, -2, -3, +1, +2, +3.........
Danke für die Hilfe
Für eine einzelne Bedingung könntest du sowas machen:
Wäre hier noch etwas eleganter, wenn pop() Slicing könnte.
Das lambda oben soll verdeutlichen, dass eine Funktion erwartet wird, die ein Argument annimmt.
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
Das lambda oben soll verdeutlichen, dass eine Funktion erwartet wird, die ein Argument annimmt.
Solltest mal wieder putzen.mkallas hat geschrieben:Blick in die Kristallkugel lässt numpy und Standardabweichung erscheinen.
@Draco2010: Das Problem was ich hier sehe ist, dass das nicht unbedingt eindeutig ist, und beliebig kompliziert werden kann. Was ist denn der Anwendungsfall?
@snafu: Du willst gar kein "pop" mit Slicing
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)))
Das Leben ist wie ein Tennisball.
@Draco2010: Wie gesagt, das ist kein eindeutig lösbares Problem. Man kann ja unendlich viele Formeln für eine endliche Anzahl von Zahlen bekommen. Welches ist da die "richtige" Lösung? Im ersten Beispiel könnte man auch sagen der Rechenweg ist +2, +12, +240. Das ist nicht falscher oder richtiger als die Antwort mit den Quadraten.
Wohl kaum, schließlich hat das nichts mit Python speziell zu tun, sondern ist ein allgemeines mathematisches Problem.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Welches hast du dir denn bestellt? Ich hoffe fuer dich, dass es keins von Galileo war. Die sind hier bisher sehr negativ aufgefallen.
Im Allgemeinen sind die Ressourcen unter python.org sehr zu empfehlen, d.h. man braucht nicht unbedingt ein Buch.
Im Allgemeinen sind die Ressourcen unter python.org sehr zu empfehlen, d.h. man braucht nicht unbedingt ein Buch.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Danke für die Aussage cofi , aber dieses buch von Gallileo bin ich mal durchgegangen, da man dieses Buch bei Openbook ansehen kann. Leider fand ich den Inhalt schlecht
Das Buch, welches ich bestellt habe, nennt sich "Python kurz und gut" von Mark Lutz bei www.Buch24.de!
Danach schaue ich noch ins Buch "Kollektive Intelligenz": analysieren, programmieren und nutzen bei www.Amazon.de
Ich denk mal dass mich diese zwei Bucher weiterbringen!
Das Buch, welches ich bestellt habe, nennt sich "Python kurz und gut" von Mark Lutz bei www.Buch24.de!
Danach schaue ich noch ins Buch "Kollektive Intelligenz": analysieren, programmieren und nutzen bei www.Amazon.de
Ich denk mal dass mich diese zwei Bucher weiterbringen!
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
"Python Kurz und Gut" ist eine Kurzreferenz. Ich bezweifel, dass dich das weiterbringt
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Hallo Cofi,
könnte man es mit so einem Programm lösen ?
könnte man es mit so einem Programm lösen ?
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.)"
Da Programm tut etwas vollkommen anderes (und das noch mit sehr gruseligem Code) als deine Fragestellung. Hast du das selber programmiert? Wenn nicht: hast du dir mal die Kommentare des Programms durchgelesen?
Benutze doch bitte Code-Tags, damit die Einrückung erhalten bleibt und der Code lesbar wird.
Benutze doch bitte Code-Tags, damit die Einrückung erhalten bleibt und der Code lesbar wird.
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 37
- Registriert: Samstag 15. August 2009, 04:36
Ich befürchte da hilft Dir kein noch so gutes Buch über eine Programmiersprache weiter, sondern eher der Besuch der Vorlesungen Diskrete Mathmatik und Analysis.
Eine allgemeingültige Lösung sollte möglich sein und endet dann wahrscheinlich mit einem Diplom
LG SB
Eine allgemeingültige Lösung sollte möglich sein und endet dann wahrscheinlich mit einem Diplom
LG SB
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 Diplom B
Das Leben ist wie ein Tennisball.
Du könntest einfach ein Standardmuster erstellen, wie aus einem Element x der i-te Nachfolger f(x,i) bestimmt wird. So in der Form:
Du könntest dann für alle i's die aik's fest lassen oder auf diesen einfache Muster aufbauen wie a10=0, a11=1, a12=2, ...
Dann probierst du dich einfach durch alle Lösungen durch. Du solltest nur bedenken, dass du die Muster nicht zu komplex werden dürfen und besonders die Wertebereiche für die aik nicht zu groß.
Code: Alles auswählen
f(x, i) = ai0 + ai1*x + ai2*x^2 + ai3*x^3 + ai4*....
Dann probierst du dich einfach durch alle Lösungen durch. Du solltest nur bedenken, dass du die Muster nicht zu komplex werden dürfen und besonders die Wertebereiche für die aik nicht zu groß.
Das Leben ist wie ein Tennisball.