2016-09-12 5 views
3

Ich war über eine Matrix wie zu erstellen:gibt es ein 2D-Wörterbuch in Python?

33 12 23 42 11 32 43 22 
33 − 1 1 1 0 0 1 1 
12 1 − 1 1 0 0 1 1 
23 1 1 − 1 1 1 0 0 
42 1 1 1 − 1 1 0 0 
11 0 0 1 1 − 1 1 1 
32 0 0 1 1 1 − 1 1 
43 1 1 0 0 1 1 − 1 
22 1 1 0 0 1 1 1 − 

Ich möchte Abfrage durch horizontale oder vertikale Titel, so habe ich die Matrix von:

a = np.matrix('99 33 12 23 42 11 32 43 22;33 99 1 1 1 0 0 1 1;12 1 99 1 1 0 0 1 1;23 1 1 99 1 1 1 0 0;42 1 1 1 99 1 1 0 0;11 0 0 1 1 99 1 1 1;32 0 0 1 1 1 99 1 1;43 1 1 0 0 1 1 99 1;22 1 1 0 0 1 1 1 99') 

ich die bestimmte Daten haben wollen, wenn Ich frage ein [23] [11] = 1

also gibt es eine Möglichkeit, wie wir ein 2D-Wörterbuch erstellen können, so dass ein [23] [11] = 1?

Dank

+1

Mit 2D-Wörterbuch meinen Sie ein verschachteltes Wörterbuch bis zu einem Grad/Tiefe? –

+0

Sie könnten ein 'defaultdict (dict)' verwenden, oder schreiben Sie einfach ein 'dict' mit ganzzahligen Tasten und' dict' Werten – inspectorG4dget

+0

@MosesKoledoye Vielen Dank für die Antwort! Könnten Sie mir bitte ein Beispiel geben, dass ich sagen kann, ob es die Antwort ist? –

Antwort

3

Sie nach etwas außerhalb von numpy klar zu stellen.

A defauldict mit dem default_factory als dict gibt ein Gefühl des 2D-Wörterbuch Sie wollen:

>>> from collections import defaultdict 
>>> a = defaultdict(dict) 
>>> a[23][11] = 1 
>>> a[23] 
{11: 1} 
>>> a[23][11] 
1 
+0

Hey, darf ich fragen, was das Format von" dict "sein sollte? –

+0

@Condo_programmer Wie meinst du, wollen ein Beispiel geben? –

+0

ja bitte! ich danke dir sehr! –

0

Wenn ich richtig verstehe möchten Sie gerade Ihre Zeilen/Spalten beschriften. Um innerhalb des Arrays mit numpigen Arrays zu bleiben, wäre eine einfache Lösung, eine Zuordnung zwischen den Labels und der Array-Reihenfolge zu erstellen. Ich gehe auch davon aus, dass es in Ordnung ist, die Labels in Strings umzuwandeln, da sie alles Mögliche sein können (obwohl auch ganze Zahlen gut wären).

l = {str(x) : ind for ind , x in enumerate((33,12,23,42,11,32,43,22))} 
a = sp.linalg.circulant([99,1,1,1,0,0,1,1]) 
a[l['32'],l['23']] 
1

Sind Sie auf der Suche nach einem Wörterbuch mit Paaren als Schlüssel?

d = {} 
d[33, 12] = 1 
d[33, 23] = 1 
# etc 

Beachten Sie, dass in Python d[a, b] für d[(a, b)]

1

Eine andere Möglichkeit nur syntaktischer Zucker ist Tupeln als Dictionary-Schlüssel

dict((33,12):1, (23,12):1, ...] 

scipy.sparse hat ein Sparse Matrix-Format zu verwenden, die es speichert Werte ist in ein solches Wörterbuch. Mit Ihren Werten würde eine solche Matrix eine 50x50-Matrix mit meist 0 Werten und nur 1en an diesen ausgewählten Koordinaten darstellen.

Beachten Sie, dass die Schlüssel eines Wörterbuchs (gewöhnliche zumindest) nicht

bestellt

Was ist mit diesen Daten zu gehen, zu tun? Ein Wörterbuch, ob Typ oder verschachtelt, ist gut für eine Art der Nutzung, aber schlecht für andere. Eine Matrix wie Ihre Beispieldatei eignet sich besser für andere Aufgaben, z. B. Operationen entlang von Zeilen oder Spalten. Das Wörterbuchformat verdeckt diese Art von geordnetem Layout weitgehend.

Verwandte Themen