Catatan: Ini meminta kebalikan dari konversi tuple-ke-array biasa.
Saya harus meneruskan argumen ke fungsi (dibungkus c ++) sebagai tupel bersarang. Misalnya, karya berikut
X = MyFunction( ((2,2),(2,-2)) )
sedangkan berikut ini tidak
X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )
Sayangnya, argumen yang ingin saya gunakan datang kepada saya sebagai array numpy. Larik tersebut selalu memiliki dimensi 2xN untuk beberapa N, yang mungkin cukup besar.
Apakah ada cara mudah untuk mengubahnya menjadi tupel? Saya tahu bahwa saya hanya dapat mengulang, membuat tupel baru, tetapi lebih suka jika ada akses bagus yang disediakan oleh numpy array.
Jika tidak mungkin melakukan ini sebaik yang saya harapkan, apa cara tercantik untuk melakukannya dengan mengulang, atau apa pun?
tuple(arr)
Inilah fungsi yang akan melakukannya:
Dan contoh:
sumber
type(a)==numpy.ndarray
?Saya kurang puas, akhirnya saya pakai ini:
Saya tidak tahu apakah ini lebih cepat, tetapi kelihatannya lebih efektif;)
sumber
Pilihan lain
Jika Anda meneruskan array NumPy ke fungsi C ++, Anda mungkin juga ingin melihat menggunakan Cython atau SWIG.
sumber
list
dengan menghilangkan tanda kurung siku, yaitu menggunakantuple(tuple(row) for row in myarray)
Jika Anda suka potongan panjang, berikut adalah cara lain tuple (tuple (a_m.tolist ()) untuk a_m di a)
Outputnya adalah ((1, 2), (3, 4))
Perhatikan saja (tuple (a_m.tolist ()) untuk a_m dalam a) akan memberikan ekspresi generator. Semacam terinspirasi oleh komentar @ norok2 untuk jawaban Greg von Winckel
sumber