numpy-ndarray

___ qstnhdr ___ Schneiden Sie mehrere 2D-np-Arrays zum Ermitteln von Zonen ___ answer48035482 ___

Dies scheint ein ähnliches Problem zu sein, wenn eindeutige Regionen in einem Bild markiert werden sollen. Dies ist eine Funktion, die ich geschrieben habe, um dies zu tun, obwohl Sie zuerst Ihre 3 Arrays zu 1 3D-Array verketten müssen.

%Vor%

Dadurch werden eindeutige 3-Wert-Kombinationen beschriftet, während Zonen Zonen zugeordnet werden, die die gleiche 3-Wert-Kombination haben, aber nicht miteinander in Kontakt stehen.

%Vor%

gibt zurück:

%Vor%     
___ answer48035573 ___

Dies kann mit %code% und dann mit einem Mapping erfolgen :

Code:

%Vor%

Testcode:

%Vor%

Ergebnisse:

%Vor%     
___ answer48035651 ___

Hier ist eine einfache Python-Methode mit %code% . Es erfordert die Eingabe von 1D-Listen, aber das sollte kein großes Problem sein. Die Strategie besteht darin, die Listen zusammen mit einer Indexnummer zusammenzufassen und dann die resultierenden Spalten zu sortieren. Wir gruppieren dann identische Spalten und ignorieren die Indexnummer beim Vergleich von Spalten. Dann sammeln wir die Indexnummern aus jeder Gruppe und verwenden sie, um die endgültige Ausgabeliste zu erstellen.

%Vor%

Ausgabe

%Vor%

Es gibt keine Notwendigkeit, diese zweite Sortierung durchzuführen, wir könnten einfach eine einfache Listenkomposition verwenden

%Vor%

oder Generatorausdruck

%Vor%

Ich habe es nur so gemacht, dass meine Ausgabe mit der Ausgabe in der Frage übereinstimmt.

    
___ answer48035633 ___

Jede Position im Gitter ist einem Tupel zugeordnet, das aus einem Wert von besteht %code% , %code% und %code% . Zum Beispiel hat die obere linke Ecke das Tupel %code% . Wir möchten dieses Tupel einer Zahl zuordnen, die dieses Tupel eindeutig identifiziert.

Eine Möglichkeit wäre, an %code% als Index in das 3D-Array zu denken %Code%. Dieses bestimmte Array wurde ausgewählt um die größten Werte in %code% , %code% und %code% :

zu berücksichtigen %Vor%

Nun können wir das Tupel (8,9,13) der Nummer 1934 zuordnen:

%Vor%

Wenn wir dies für jeden Standort im Raster tun, erhalten wir für jeden Standort eine eindeutige Nummer. Wir könnten genau hier enden und diese eindeutigen Zahlen als Etiketten verwenden.

Oder wir können kleinere Integer-Label erzeugen (beginnend bei 0 und steigend um 1) mit %code% mit %code% :

%Vor%

Also zum Beispiel

%Vor%

ergibt

%Vor%

Die obige Methode funktioniert gut, solange die Werte in %code% , %code% und %code% kleine ganze Zahlen sind. Wenn die Ganzzahlen zu groß wären, könnte das Produkt ihrer Höchstwerte den maximal zulässigen Wert überschreiten, den man an %code% übergeben kann. Darüber hinaus wäre die Erzeugung einer derart großen Anordnung ineffizient. Wenn die Werte Floats wären, könnten sie nicht als Indizes in das 3D-Array %code% interpretiert werden.

Um diese Probleme zu beheben, verwenden Sie %code% , um die Werte in %code% , %code% und %code% zuerst in eindeutige Ganzzahlen umzuwandeln:

%Vor%

was das gleiche Ergebnis wie oben zeigt, funktioniert aber auch wenn %code% , %code% , %code% Floats und / oder große ganze Zahlen sind.

Schließlich können wir die Erzeugung von %code% vermeiden:

%Vor%

durch Berechnung von %code% als Produkt von Indizes und Schritten:

%Vor%

Also alles zusammensetzen:

%Vor%     
___ tag123numpy ___ NumPy ist eine wissenschaftliche und numerische Erweiterung der Programmiersprache Python. ___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ answer48036161 ___

Hier ist eine Möglichkeit, dieses Problem mithilfe einer wörterbuchbasierten Suche zu lösen.

%Vor%     
___ tag123multidimensionarray ___ Multidimensional-Arrays können als multidimensionale Tabellen beschrieben werden. Jeder Index, der verwendet wird, um ein bestimmtes Element zu finden, wird als Dimension bezeichnet. ___ tag123numpynarray ___ hilf uns dieses Wiki zu bearbeiten ___ qstntxt ___

Mit diesem kleinen reproduzierbaren Beispiel konnte ich bisher kein neues Integer-Array aus 3 Arrays generieren, das eindeutige Gruppierungen über alle drei Input-Arrays enthält.

Die Arrays sind mit topographischen Eigenschaften verknüpft:

%Vor%

Die Idee ist, dass die geografischen Konturen in drei verschiedene Eigenschaften unter Verwendung von GIS-Routinen aufgeteilt werden:

  • 1-8 für Aspekt (1 = Nordseite, 2 = Nordostseite, usw.)
  • 9-12 für Steigung (9 = sanfte Steigung ... 12 = steilste Steigung)
  • 13-16 für die Höhe (13 = niedrigste Höhen ... 16 = höchste Höhen)

Die kleine Grafik unten versucht, die Art von Ergebnis darzustellen, nach dem ich gesucht habe (das Feld wird unten links gezeigt). Beachten Sie, dass die "Antwort" in der Grafik nur eine mögliche Antwort ist. Ich bin nicht besorgt über die endgültige Anordnung von Ganzzahlen im resultierenden Array, solange das letzte Array eine Ganzzahl in jedem Zeilen- / Spaltenindex enthält, die eindeutige Gruppierungen identifiziert.

Beispielsweise haben die Array-Indizes bei [0,1] und [0,2] den gleichen Aspekt, die gleiche Steigung und die gleiche Elevation und erhalten daher im resultierenden Array den gleichen Ganzzahl-Bezeichner.

Hat numpy eine eingebaute Routine für so etwas?

    
___
5
Antworten

Schneiden Sie mehrere 2D-np-Arrays zum Ermitteln von Zonen

Mit diesem kleinen reproduzierbaren Beispiel konnte ich bisher kein neues Integer-Array aus 3 Arrays generieren, das eindeutige Gruppierungen über alle drei Input-Arrays enthält. Die Arrays sind mit topographischen Eigenschaften verknüpft:...
30.12.2017, 15:24