Seite 1 von 1
numpy und String Array
Verfasst: Freitag 13. Dezember 2013, 10:06
von Mr.Mister
Hallo Zusammen,
ich programmiere gerade für die Uni ein Projekt und bin auf folgendes Problem gestoßen:
Code: Alles auswählen
new_Taxon = "AC"
col = numpy.array(["A","B","C"])
col = numpy.delete(col, 0)
col = numpy.delete(col, 2)
col = numpy.insert(col, 0, new_Taxon)
Output: ["A","B"]
Wenn ich folgendes an col ändere:
funktionert alles wie es soll.
ich vermute einfach einmal, dass durch das Leerzeichen im zweiten Teil jedes Arrayelement 2 Symbole zugewiesen bekommt, da das einzige vorhandene Element ("B ") auch zwei besitzt und im Ersten nur eines, daher wird mein AC zu A zerschnitten.
Aber wie schaffe ich es jetzt das ganze so variabel zu halten, dass ich beliebig große Elemente hinzufügen kann?
Ich hoffe ihr könnt mir weiterhelfen.
Viele Grüße
Mr.Mister
Re: numpy und String Array
Verfasst: Freitag 13. Dezember 2013, 12:42
von Sirius3
@Mr.Mister: Wenn Du eine Liste von Strings verarbeiten willst, warum nimmst Du dann numpy und nicht einfach eine Python-Liste?
Re: numpy und String Array
Verfasst: Freitag 13. Dezember 2013, 12:53
von snafu
Was ist der genaue Anwendungsfall? Oder anders gefragt: Was genau repräsentieren diese Buchstaben?
Re: numpy und String Array
Verfasst: Freitag 13. Dezember 2013, 13:08
von BlackJack
@Mr.Mister: Das was Du im ersten Beitrag behauptest kann nicht sein, denn ``col = numpy.delete(col, 2)`` führt ganz offensichtlich zu einer Ausnahme weil Du versuchst etwas zu löschen was es nicht gibt:
Code: Alles auswählen
In [2]: col = numpy.array(["A","B","C"])
In [3]: col
Out[3]:
array(['A', 'B', 'C'],
dtype='|S1')
In [4]: col = numpy.delete(col, 0)
In [5]: col
Out[5]:
array(['B', 'C'],
dtype='|S1')
In [6]: col = numpy.delete(col, 2)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/bj/<ipython-input-6-afaf86f7cd5f> in <module>()
----> 1 col = numpy.delete(col, 2)
/usr/local/lib/python2.7/dist-packages/numpy/lib/function_base.pyc in delete(arr, obj, axis)
3454 if (obj < 0 or obj >=N):
3455 raise ValueError(
-> 3456 "invalid entry")
3457 newshape[axis]-=1;
3458 new = empty(newshape, arr.dtype, arr.flags.fnc)
ValueError: invalid entry
Bei Fehlern bitte den *tatsächlichen* Code und den *tatsächlichen* Fehler zeigen. Wenn Du Code zeigst und ein Ergebnis beschreibst was überhaupt nicht dazu passt, kann man schlecht bis gar nicht helfen, sondern höchstens mehr oder weniger informiert raten.
Ansonsten schliesse ich mich den Fragen meiner beiden Vorredner an.
Re: numpy und String Array
Verfasst: Samstag 14. Dezember 2013, 17:50
von Mr.Mister
Soo, hatte heute endlich Zeit eure Beiträge zu lesen.
Also:
@BlackJack: Sorry mein Fehler, es war numpy.delete(col,1), dann sollte das ganze auch passen.
Dann @Sirius3 und snafu:
Ich versuche mich für die Uni am UPGMA Clustering zur Erstellung einer Struktur für einen Phylogenetischen Baum.
Ich benutze numpy um mir das Leben mit den Matrixberechnungen einfacher zu machen.
Die Buchstaben sind eigentlich nur Label. Meine idee war es ein "Frame" zu erstellen in das ich nachher die kleiner werdende Matrix und die Labels einfügen kann.
Quasie so:
Code: Alles auswählen
init_Matrix = num.matrix([[0,8,5,3],[0,0,9,2],[0,0,0,3],[0,0,0,0]])
col = num.array(["A","B","C","D"])
row = num.array(["A","B","C","D"])
matrix_row = 5
matrix_col = 5
matrix_Frame = num.zeros((matrix_row, matrix_col), object)
matrix_Frame[1:,1:] = init_Matrix
matrix_Frame[0,1:] = col
matrix_Frame[1:,0] = row
matrix_Frame[0,0] = ''
Wenn die Matrix nun beim clustern kleiner wird, muss ich nur die einzelnen Komponenten anpassen und neu zusammensetzen.
Falls ich mir das Leben zu kompliziert mache und es einfacher geht, ich bin für alles offen.
Es handelt sich hierbei um mein erstes größeres Programm in Python jedoch wollte ich die Chance des Projektes nutzen um meine Fähigkeiten zu erweitern. Falls meine Idee also total daneben ist dürft ihr das gerne sagen

Re: numpy und String Array
Verfasst: Samstag 14. Dezember 2013, 18:37
von BlackJack
@Mr.Mister: Was genau soll denn mit diesem `matrix_Frame` gemacht werden? Das ist ja ein Array mit allgemeinen Objekten, also gehen schon mal sämtliche Vorteile bezüglich der Rechengeschwindigkeit und der kompakten Speicherung von Zahlen in Numpy-Arrays verloren.
Re: numpy und String Array
Verfasst: Samstag 14. Dezember 2013, 19:23
von Mr.Mister
Naja das Frame dient eig. nur als Hülle zum es mit den Labels und der Zahlenmatrix zu füllen.
Also die oberste Reihe und linkeste Spalte wird mit den Labels gefüllt und der Rest mit einer Matrix aus Zahlenwerten.
Ist es dann sinnvoller sich einfach ein normales 2D Array als Hülle zu definieren statt numpy zu nutzen?
Achja und Danke schonmal für eure Anstrengungen

Re: numpy und String Array
Verfasst: Samstag 14. Dezember 2013, 19:47
von BlackJack
@Mr.Mister: Die Frage ist IMHO immer noch nicht ausreichend beantwortet. Was willst Du damit *machen*, *warum* steckst Du das in so eine „Hülle”? Und was ist ein „normales 2D Array” wenn man kein Numpy benutzt? Python hat keinen eingebauten Arraytyp, nur ein sehr selten genutzes `array`-Modul, welches einen Typ bietet, der so etwas was Du da mit `matrix_Frame` machst, überhaupt nicht zulässt weil es a) nur eindimensionale Arrays gibt und b) da keine allgemeinen Objekte drin gespeichert werden können.
Als 2D-Struktur in ”reinem” Python würde man verschachtelte Listen verwenden. Aber auch da würde sich dann wieder die Frage stellen wozu das überhaupt gut sein soll. Wenn man anfängt Werte mit verschiedenen (Duck-)Typen in eine Liste zu stecken, riecht da irgendwas. Listen sollten möglichst gleichmässig verarbeitbar sein, also zum Beispiel so bestückt sein, dass man auf jedem Element die gleiche Operation ausführen kann. Wenn man Werte mit verschiedenen Typen in eine Liste steckt oder die bedeutung eines Werts von der Position innerhalb der Liste abhängig ist, wird der Code mit dem man das verarbeitet komplizierter und unübersichtlicher weil man Sonderbehandlung nach Typ und/oder Position einbauen muss.
Re: numpy und String Array
Verfasst: Sonntag 15. Dezember 2013, 10:21
von Mr.Mister
Das Python keinen Arraytypen besitzt wusste ich gar nicht.
Ich nutze die Hülle eigentlich nur um nachher eine vernünftige Ausgabe printen zu können.
Also ich rechne ausschließlich mit der Matrix die oben als init_Matrix benannt ist und col und row werden gleich zur Rechnung in iniin Mat_Matrix geclustert. Dann wird das ganze in matrix_Frame zusammengesteckt um eine Ausgabe zu printen und am Ende wird das Clusterergebnis aus row an eine neue Methode übergeben.
Re: numpy und String Array
Verfasst: Sonntag 15. Dezember 2013, 12:03
von /me
Mr.Mister hat geschrieben:Das Python keinen Arraytypen besitzt wusste ich gar nicht.
Die Standard Library bietet schon ein
array an.
Re: numpy und String Array
Verfasst: Sonntag 15. Dezember 2013, 14:28
von BlackJack
@Mr.Mister: Wenn Du ein Numpy-Array zur Textausgabe ”missbrauchen” möchtest, dann kannst Du das natürlich so machen. Die Absicht wäre von vornherein deutlicher gewesen wenn Du statt ”frei stehendem” Code eine entsprechende Funktion gezeigt hättest, für genau diese Aufgabe.
@/me: Das Modul hatte ich ja schon erwähnt. Was ich auch dauernd vergesse ist der eingebaute `bytearray`-Typ, aber der ist ja hier auch nicht zu gebrauchen.

Re: numpy und String Array
Verfasst: Montag 16. Dezember 2013, 18:47
von Mr.Mister
Da bin ich wieder, sorry wegen dem frei stehendem Code, war wirklich etwas dümmlich von mir
Ich hab einfach mal just for fun meine col und row Arrays in einfache Listen geändert, aber habe immer noch das Problem, dass mein "AC" zu "A" wird, weil es abgeschnitten wird.
Ich verstehe nicht warum das Element "AC" nicht normal in die Liste eingefügt wird...

Re: numpy und String Array
Verfasst: Montag 16. Dezember 2013, 19:02
von Mr.Mister
Ok, ich bin ein Depp.
Wenn ich natürlich meine Änderungen nicht vollständig vornehme, dann brauch ich mich nicht wundern.
Funktioniert also gerade alles wie es soll. Vielen Dank für eure Hilfe
