Numpay shape Rückgabewert (nL,mL)

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.
Antworten
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

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
Sirius3
User
Beiträge: 18297
Registriert: Sonntag 21. Oktober 2012, 17:20

@gerald123: Du bekommst ein Tuple mit Zahlen. Selbst als String-Darstellung des Tuples bekomme ich kein 'L'.
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.
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

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.
Benutzeravatar
sparrow
User
Beiträge: 4547
Registriert: Freitag 17. April 2009, 10:28

BlackJack hat geschrieben:Das sind halt Werte vom Typ `long`, die verhalten sich aber wie `int`, also wo genau liegt das Problem?
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“:

Code: Alles auswählen

m, n = the_tuple_with_two_elements
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

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!!
Benutzeravatar
sparrow
User
Beiträge: 4547
Registriert: Freitag 17. April 2009, 10:28

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.
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.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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).
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten