Was ist mit 2D-Array-Unterstützung gemeint?

8

Ich habe gelesen, dass Python keine 2D-Arrays unterstützt, sondern ein Array eines Arrays. Ich verstehe das Array einer Array-Sache, aber was bedeutet es, 2D-Arrays zu unterstützen?

In C wird ein 2D-Array einfach in ein 1D-Array konvertiert, indem man etwas Phantasie macht ( Gesehen hier ). Gibt es Sprachen, die tatsächliche 2D-Arrays implementieren?

Danke für die Hilfe und ich hoffe, ich habe keine doppelte Frage geschrieben; Wenn ja, gib mir einen Link und schließe meine Frage:)

    
Nope 09.11.2009, 00:49
quelle

7 Antworten

10

Es gibt Sprachen, die 2D (oder 3D, usw.) Arrays implementieren. Fortran ist einer von ihnen. Es bedeutet, dass Sie einen Array-Index-Ausdruck wie array[x,y] schreiben können und die Sprache wird sich um die Mathematik kümmern, um das richtige Element zu finden.

Außerdem ist Numpy eine numerische Erweiterung von Python, die n-dimensionale Arrays bereitstellt.

    
Ned Batchelder 09.11.2009, 00:53
quelle
6

Jemand hat bereits numpy erwähnt, und das OP kommentierte, dass "es zurück zur schicken Zeiger-Mathematik mit C-Feldern geht" - das ist ein völlig triviales Implementierungsdetail! Da der zugrundeliegende Speicher in einem (normalen ;-) Computer als ein Array von Bytes (oder Worten) gesehen werden kann, ist natürlich jede Datenstruktur was auch immer implementiert oben auf diesem Array (oder Scheiben davon) plus "Fancy Pointer Mathe" - doppelendige Warteschlangen, multi-dimensionale Arrays, binäre Bäume, Sie nennen es, die zugrunde liegenden Implementierungen werden immer darauf herunterkochen (genau wie alle ausgefallenen Kontrollstrukturen auf bedingte und unbedingte Sprünge auf Maschinenebene abkürzen und so weiter). SO WAS ?! Dies sind natürlich Implementierung Details. numpy , genau wie Fortran und andere Sprachen und Bibliotheken, stellt N-dimensionale Arrays zur Verfügung - egal wie sie es "tief im Inneren" implementiert (eigentlich ist numpy ziemlich im Vornherein, da Sie Arrays leicht abflachen und umformen können) ziemlich typisch für Python, um Abstraktionen auf höherer Ebene mit ziemlich guten "Haken" zu liefern, wie sie mit niedrigeren Ebenen zusammenhängen ;-).

z. B.

%Vor%

Sie können die Daten im N-dimensionalen Array mit hoher Flexibilität und exzellenter Leistung umformen, indexieren, schneiden und formen - auch wenn Sie wissen, dass der zugrunde liegende Datenblock genau dieses eindimensionale Array ist (hier ist x geboren und bleibt erhalten) 1-D, aber selbst wenn das nicht der Fall wäre, könnte man noch immer auf das zugrundeliegende 1-D-Array durch Abflachen zugreifen.

Dies ist, was "Unterstützung für N-dimensionales Array" bedeutet (obwohl in den meisten anderen Sprachen und Frameworks, die eine solche Unterstützung bieten, weniger Transparenz, geringere Funktionalität oder beides erreicht wird;). p>     

Alex Martelli 09.11.2009 01:22
quelle
2

C # hat mehrdimensionale Arrays , aber sie werden als gezackte Arrays (Arrays) empfohlen von Arrays) sind performanter.

    
SLaks 09.11.2009 00:54
quelle
1

Fortran hat echte mehrdimensionale Arrays. Dieser Link spricht über sie im FORTRAN 77-Fall.

    
Carl Norum 09.11.2009 00:53
quelle
1

Ich denke, "Unterstützung von 2D-Arrays" bedeutet, dass Sie mit der Sprache auf die Daten zugreifen können, als wäre es ein 2D-Array. In c ist die fancy math durch Array-Konstrukte versteckt:

%Vor%

Es gibt einen Weg, dies auch durch Zeigerarithmetik zu tun (was Sie wahrscheinlich als fancy math bezeichnen).

In Wirklichkeit ist der Speicher ein großer Teil adressierbarer Datenbytes [0,1,2,3,4,5,6 ... Ende des Speichers], so dass es keine "native" Vorstellung von 2D-Array gibt, irgendwo etwas muss Programmierer "Zeile 1 Spalte 2" in die tatsächliche Adresse im Speicher übersetzen. Programmiersprachen geben Ihnen normalerweise eine Möglichkeit, die Übersetzung zu verbergen.

    
stefanB 09.11.2009 00:57
quelle
1

Tatsächliche Arrays in Python - dh das array -Objekt, das vom array -Modul erstellt wurde - sind streng eindimensional. Sie sind auch etwas, das Sie wahrscheinlich nicht verwenden werden, es sei denn, Ihr Code muss mit C-Datenstrukturen zusammenarbeiten, Sie arbeiten mit riesigen Datenmengen, die im Speicher gehalten werden müssen, oder Sie schreiben etwas wie numpy .

    
Robert Rossney 09.11.2009 01:26
quelle
1

Rosetta Code enthält Python-Beispiele für das Erstellen eines zweidimensionalen Arrays .

    
Paddy3118 23.12.2009 06:54
quelle