Uwaga: jest to prośba o odwrócenie zwykłej konwersji krotki na tablicę.
Muszę przekazać argument do funkcji (opakowanej w c ++) jako zagnieżdżonej krotce. Na przykład działa następująca
X = MyFunction( ((2,2),(2,-2)) )
podczas gdy poniższe nie
X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )
Niestety argument, którego chciałbym użyć, przychodzi do mnie jako tablica numpy. Ta tablica zawsze ma wymiary 2xN dla niektórych N, które mogą być dość duże.
Czy istnieje łatwy sposób przekształcenia tego w krotkę? Wiem, że mógłbym po prostu zapętlić, tworząc nową krotkę, ale wolałbym, aby był jakiś fajny dostęp, który zapewnia tablica numpy.
Jeśli nie można tego zrobić tak przyjemnie, jak mam nadzieję, jaki jest najpiękniejszy sposób na zrobienie tego przez zapętlenie, czy cokolwiek innego?
tuple(arr)
Oto funkcja, która to zrobi:
I przykład:
źródło
type(a)==numpy.ndarray
?Nie byłem zadowolony, więc w końcu skorzystałem z tego:
Nie wiem, czy to szybsze, ale wygląda bardziej efektywnie;)
źródło
Inna opcja
Jeśli przekazujesz tablice NumPy do funkcji C ++, możesz również chcieć przyjrzeć się użyciu Cythona lub SWIG.
źródło
list
, pomijając nawiasy kwadratowe, np. Używająctuple(tuple(row) for row in myarray)
Jeśli lubisz długie cięcia, oto inny sposób krotki (krotka (a_m.tolist ()) dla a_m w a)
Dane wyjściowe to ((1, 2), (3, 4))
Zauważ, że tylko (tuple (a_m.tolist ()) for a_m in a) da wyrażenie generatora. Rodzaj inspiracji komentarzem @ norok2 do odpowiedzi Grega von Winckela
źródło