Seite 1 von 1
Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 17:50
von gerald123
Ich muss in einer Funktion die Dimension des Eingabearrays checken (numpy array).
Mit x.shape erhalte ich die Dimension von x als Tupel. Beispiel: (2L, 3L).
Gibt es eine einfacher Möglichkeit, als das "trennen" von Zahl und L? Hätte gerne nur die Zahlen (m x n).
Viele Dank
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:05
von Sirius3
@gerald123: Du bekommst ein Tuple mit Zahlen. Selbst als String-Darstellung des Tuples bekomme ich kein 'L'.
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:09
von BlackJack
@gerald123: Was stört Dich an dem L? Das sind halt Werte vom Typ `long`, die verhalten sich aber wie `int`, also wo genau liegt das Problem? Sollte es nur um eine Ausgabe für den Benutzer gehen dann erzeuge selbst eine Zeichenkette aus dem Wert beziehungsweise den Werten und nimm nicht die Darstellung des Tupels.
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:14
von gerald123
Vielen Dank für eure Antworten:
" dann erzeuge selbst eine Zeichenkette aus dem Wert beziehungsweise den Werten und nimm nicht die Darstellung des Tupels".
Wie erzeuge ich aus:
Tuple(2L, 3L)
die Variablen: m=2 und n = 3 ?
Ich benötige die Dimensionen in dieser Form für weitere Schritte.
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:20
von sparrow
BlackJack hat geschrieben:Das sind halt Werte vom Typ `long`, die verhalten sich aber wie `int`, also wo genau liegt das Problem?
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:22
von BlackJack
@gerald123: Was für weitere Schritte? Wie gesagt, die Werte verhalten sich wie ganze Zahlen, das 'L' ist nur Teil der Zeichenkettenrepräsentation mittels `repr()`. Nur dort taucht das überhaupt auf, und diese Repräsentation ist sowieso nur für die Fehlersuche gedacht, beziehungsweise für Programmierer um sich Werte als Zeichenketten anzeigen zu lassen und zu sehen was die enthalten. In diesem Fall also um `int`-Werte von `long`-Werten unterscheiden zu können ohne `type()` bemühen zu müssen.
Wenn Du die beiden Werte an einzelne Namen binden möchtest funktioniert das mit `long`-Werten genau wie mit `int`-Werten, oder irgendwelchen anderen Werten die in einem Tupel stecken. Indexzugriff oder Zuweisung an mehrere Namen auf der linken Seite des ``=``, a.k.a. „tupel unpacking“:
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:40
von gerald123
Ok - Danke.
Das heißt, obwohl bei value: 2L steht, entspricht das der Zahl 2 und L steht nur für die Typbezeichnung dabei?
Warum steht das nur beim Typ long dabei? Gibts eine Möglickeit, die Typbezeichnugn auch bei long wegzulassen?
Vielen Dank noch einmal!!
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:55
von sparrow
Wie BlackJack schon sagte. Das steht da ausschließlich bei der Ausgabe von repr(). Du musst das also gar nicht wegkriegen. Es wird dir nur angezeigt um dir nur zu Debug-Zwecken angezeigt, damit du weißt welche Art von Datentyp dahinter steckt.
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Sonntag 18. Oktober 2015, 18:59
von BlackJack
@gerald123: Warum stört Dich das L denn so sehr? Das hat keinerlei sonstige Auswirkungen und man sieht es ja nur in der `repr()`-Darstellung, also sehen das eh nur Programmierer, und die wissen so etwas vielleicht ganz gerne. Man weiss dann beispielsweise das, wenn man nicht mit `long` explizit irgendwo zu tun hatte, das eine Rechnung den `int`-Bereich verlassen hat, selbst wenn das Endergebnis als `int` darstellbar wäre. Das kann zum Beispiel interessant sein wenn man einen Algorithmus von oder nach C oder einer andere Programmiersprache portiert wo so etwas unter Umständen zu anderem Verhalten und damit zu anderen Ergebnissen führen würde.
Re: Numpay shape Rückgabewert (nL,mL)
Verfasst: Montag 19. Oktober 2015, 08:09
von MagBen
gerald123 hat geschrieben:Mit x.shape erhalte ich die Dimension von x als Tupel. Beispiel: (2L, 3L).
Wie kriegst Du es eigentlich hin, dass shape ein Tuple mit Long Integer zurückgibt? Eine normale Python int hat 64bit (auf Linux 64 bit), größer können Numpy-Arrays sowieso nicht werden (im Jahre 2015).