Hinweis: Dies erfordert die Umkehrung der üblichen Tupel-Array-Konvertierung.
Ich muss ein Argument als verschachteltes Tupel an eine (umschlossene c ++) Funktion übergeben. Zum Beispiel funktioniert das Folgende
X = MyFunction( ((2,2),(2,-2)) )
während die folgenden nicht
X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )
Leider kommt mir das Argument, das ich verwenden möchte, als numpy Array vor. Dieses Array hat immer Dimensionen 2xN für einige N, die ziemlich groß sein können.
Gibt es eine einfache Möglichkeit, dies in ein Tupel umzuwandeln? Ich weiß, dass ich mich einfach durchschleifen und ein neues Tupel erstellen könnte, würde es aber vorziehen, wenn das numpy-Array einen guten Zugriff bietet.
Wenn es nicht so gut möglich ist, wie ich hoffe, was ist der schönste Weg, dies durch Schleifen zu tun, oder was auch immer?
tuple(arr)
Hier ist eine Funktion, die das macht:
Und ein Beispiel:
quelle
type(a)==numpy.ndarray
?Ich war nicht zufrieden, also habe ich das endlich benutzt:
Ich weiß nicht, ob es schneller geht, aber es sieht effektiver aus;)
quelle
Andere Option
Wenn Sie NumPy-Arrays an C ++ - Funktionen übergeben, möchten Sie möglicherweise auch Cython oder SWIG verwenden.
quelle
list
indem Sie die eckigen Klammern weglassen, dhtuple(tuple(row) for row in myarray)
Wenn Sie lange Schnitte mögen, gibt es hier einen anderen Weg, Tupel (Tupel (a_m.tolist ()) für a_m in a)
Die Ausgabe ist ((1, 2), (3, 4))
Beachten Sie, dass nur (Tupel (a_m.tolist ()) für a_m in a) einen Generatorausdruck ergibt. Inspiriert von @ norok2s Kommentar zu Greg von Winckels Antwort
quelle