Abweichung und Gemeinsamkeiten der Zahlen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Draco2010
User
Beiträge: 40
Registriert: Dienstag 18. August 2009, 06:28

Hallo

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

Vielen Dank
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Ja



...auch wenn ich keine Ahnung habe, was du meinst.
Benutzeravatar
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.
Draco2010
User
Beiträge: 40
Registriert: Dienstag 18. August 2009, 06:28

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 :D
Benutzeravatar
snafu
User
Beiträge: 6747
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
mkallas hat geschrieben:Blick in die Kristallkugel lässt numpy und Standardabweichung erscheinen.
Solltest mal wieder putzen. ;)
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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@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
User
Beiträge: 40
Registriert: Dienstag 18. August 2009, 06:28

Danke für die Anregungen !

Es sollte eigendlich ein Test sein, ob man mit Python verschiedenste Ergebnise - von Zahlenrätsel - bekommen kann :oops:

Gruß
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.
Draco2010
User
Beiträge: 40
Registriert: Dienstag 18. August 2009, 06:28

Danke trotzdem an alle Beteiligten :)

Habe mir heute ein Python Buch bestellt, vielleicht bringt mich das weiter :roll:

Gruß an alle
lunar

Wohl kaum, schließlich hat das nichts mit Python speziell zu tun, sondern ist ein allgemeines mathematisches Problem.
Benutzeravatar
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.
Draco2010
User
Beiträge: 40
Registriert: Dienstag 18. August 2009, 06:28

Danke für die Aussage cofi :D , aber dieses buch von Gallileo bin ich mal durchgegangen, da man dieses Buch bei Openbook ansehen kann. Leider fand ich den Inhalt schlecht :x

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!
Benutzeravatar
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 ;)
Draco2010
User
Beiträge: 40
Registriert: Dienstag 18. August 2009, 06:28

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ß
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Shining-Blue
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 :lol:

LG SB
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Shining-Blue hat geschrieben:Eine allgemeingültige Lösung sollte möglich sein und endet dann wahrscheinlich mit einem Diplom :lol: 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.
Das Leben ist wie ein Tennisball.
Draco2010
User
Beiträge: 40
Registriert: Dienstag 18. August 2009, 06:28

Na Danke for die Anregungen, dennoch werde ich noch weiterhin experimentieren :D

Gruß

Ich hoffe, es Antwortet keiner mehr :? Ausser jemand hat eine gute Idee :wink:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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:

Code: Alles auswählen

f(x, i) = ai0 + ai1*x + ai2*x^2 + ai3*x^3 + ai4*....
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ß.
Das Leben ist wie ein Tennisball.
Antworten