Seite 1 von 2
Abweichung und Gemeinsamkeiten der Zahlen
Verfasst: Donnerstag 20. August 2009, 06:34
von Draco2010
Hallo
lässt sich ein eigendlich in Python ein Algorithmus schreiben, der Gemeinsamkeiten und Abweichungen, in einer Reihe von Zahlen feststellen kann

?
Vielen Dank
Verfasst: Donnerstag 20. August 2009, 07:00
von Darii
Ja
...auch wenn ich keine Ahnung habe, was du meinst.
Verfasst: Donnerstag 20. August 2009, 07:31
von mkesper
Blick in die Kristallkugel lässt
numpy und Standardabweichung erscheinen.
Verfasst: Donnerstag 20. August 2009, 17:01
von Draco2010
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

Verfasst: Donnerstag 20. August 2009, 18:00
von snafu
Für eine einzelne Bedingung könntest du sowas machen:
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
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.
Solltest mal wieder putzen.

Verfasst: Donnerstag 20. August 2009, 20:17
von BlackJack
@Draco2010: Das Problem was ich hier sehe ist, dass das nicht unbedingt eindeutig ist, und beliebig kompliziert werden kann. Was ist denn der Anwendungsfall?
Verfasst: Donnerstag 20. August 2009, 21:20
von EyDu
@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)))
Verfasst: Samstag 22. August 2009, 14:48
von Draco2010
Danke für die Anregungen !
Es sollte eigendlich ein Test sein, ob man mit Python verschiedenste Ergebnise - von Zahlenrätsel - bekommen kann
Gruß
Verfasst: Samstag 22. August 2009, 15:16
von BlackJack
@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.
Verfasst: Samstag 22. August 2009, 17:17
von Draco2010
Danke trotzdem an alle Beteiligten
Habe mir heute ein Python Buch bestellt, vielleicht bringt mich das weiter
Gruß an alle
Verfasst: Samstag 22. August 2009, 17:51
von lunar
Wohl kaum, schließlich hat das nichts mit Python speziell zu tun, sondern ist ein allgemeines mathematisches Problem.
Verfasst: Samstag 22. August 2009, 17:55
von cofi
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.
Verfasst: Sonntag 23. August 2009, 06:43
von Draco2010
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!
Verfasst: Sonntag 23. August 2009, 08:05
von cofi
"Python Kurz und Gut" ist eine Kurzreferenz. Ich bezweifel, dass dich das weiterbringt

Verfasst: Montag 24. August 2009, 07:16
von Draco2010
Hallo Cofi,
könnte man es mit so einem Programm lösen ?
# 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.)"
Schönen Gruß
Verfasst: Montag 24. August 2009, 09:46
von EyDu
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.
Verfasst: Montag 24. August 2009, 10:51
von Shining-Blue
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
Verfasst: Montag 24. August 2009, 11:05
von EyDu
Shining-Blue hat geschrieben:Eine allgemeingültige Lösung sollte möglich sein und endet dann wahrscheinlich mit einem Diplom

B
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.
Verfasst: Montag 24. August 2009, 12:43
von Draco2010
Na Danke for die Anregungen, dennoch werde ich noch weiterhin experimentieren
Gruß
Ich hoffe, es Antwortet keiner mehr

Ausser jemand hat eine gute Idee

Verfasst: Montag 24. August 2009, 16:09
von EyDu
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ß.