Wie kann wurde NumPy's Array Slicing implementiert?

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
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mittwoch 30. April 2008, 12:01

Hallo zusammen.

Ich habe mir gerade ein NumPy Tutorial durchgelesen und bin dabei auf folgendes Code-Fragment gestoßen:

Code: Alles auswählen

>>> c = array( [ [[  0,  1,  2],               # a 3d array (two stacked 2d arrays)
...               [ 10, 12, 13]],
...
...              [[100,101,102],
...               [110,112,113]] ] )
>>> c.shape
(2, 2, 3)
>>> c[1,...]                                   # same as c[1,:,:] or c[1]
array([[100, 101, 102],
       [110, 112, 113]])
>>> c[...,2]                                   # same as c[:,:,2]
array([[  2,  13],
       [102, 113]])
Dabei interessiert mich am meisten wie man zB c[1,...] implementieren kann. Das man wie oben auch z.B. Tuples als Sliceelement verwenden kann ist mir bekannt. Aber sind die drei dots nicht ein syntaktischer Fehler?

phxx
BlackJack

Mittwoch 30. April 2008, 12:23

Nein drei Punkte beim Indexoperator sind kein Syntaxfehler:

Code: Alles auswählen

In [32]: class A(object):
   ....:     def __getitem__(self, arg):
   ....:         print repr(arg)
   ....:         print type(arg)
   ....:

In [33]: a = A()

In [34]: a[...]
Ellipsis
<type 'ellipsis'>
IMHO ein ziemlich ekliger Sonderfall, den ich ausser bei Numpy und seinen Vorgängern auch noch nie in der Praxis gesehen habe.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 30. April 2008, 13:52

NumPy stellt generell lustige Sachen mit den Slicing an, da war auch erst letztens ein Thread mit Kommas.

``...`` wird aber ab Python 3.0 gültiger Code.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mittwoch 30. April 2008, 14:41

Ah, ok.
Danke. Jetzt weiß ich bescheid :-)

Kollidiert ... dann in Python 3.0 nicht mit den Imports? Weil es ist ja zB möglich mit

Code: Alles auswählen

from ... import package
ein Package aus zwei Ordnern über dem aktuellen File zu importieren.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 30. April 2008, 16:33

Der Parser wird dann schon schlau genug sein, zu merken, wo was sinnvoll ist, keine Sorge.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten