Mengubah array NumPy ke dalam struktur Daftar Python?


298

Bagaimana cara mengonversi array NumPy ke Daftar Python (misalnya [[1,2,3],[4,5,6]]), dan melakukannya dengan cukup cepat?

Jawaban:


427

Gunakan tolist():

import numpy as np
>>> np.array([[1,2,3],[4,5,6]]).tolist()
[[1, 2, 3], [4, 5, 6]]

Perhatikan bahwa ini mengonversi nilai dari tipe numpy apa pun yang mungkin mereka miliki (mis. Np.int32 atau np.float32) ke "tipe Python kompatibel terdekat" (dalam daftar). Jika Anda ingin mempertahankan tipe data numpy, Anda bisa memanggil list () pada array Anda, dan Anda akan berakhir dengan daftar skalar numpy . (Terima kasih kepada Mr_and_Mrs_D karena menunjukkannya dalam komentar.)


6
Jika daftar Anda float32 tolistakan mengubahnya menjadi floatss - itu mungkin tidak diinginkan. Menggunakan list(myarray)tidak menderita karena ini - mengapa kita lebih suka tolist?
Mr_and_Mrs_D

1
@Mr_and_Mrs_D apakah Anda menyarankan bahwa, meskipun telah mengapung di array Anda, Anda ingin agar daftar yang dihasilkan menjadi bilangan bulat? Itu semacam pertanyaan yang sama sekali berbeda ... dan tentu saja Anda harus menentukan bahwa meskipun nilai float32, mereka semua akan menjadi integral. Bagaimanapun, jika Anda memiliki situasi itu, saya kira melakukan myarray.astype(np.int32).tolist()akan menjadi pilihan, dan eksplisit tentang apa yang Anda coba capai. (Dan terakhir, list(array_of_type_float32)tidak memberikan bilangan bulat di sini ketika saya mencobanya ... jadi saya tidak tahu apa yang Anda tanyakan.)
Peter Hansen

1
Saya tidak pernah menyebut bilangan bulat - cobafloat32_array = np.array([0.51764709], np.float32); print(float32_array.tolist()); print(list(float32_array))
Mr_and_Mrs_D

2
Oke, jadi yang dikonversi menjadi [float] dan yang lainnya menggunakan tipe float32 skalar numpy, seperti [np.float32]. Baik. Baik untuk diketahui, tetapi saya kira itu diinginkan atau tidak tergantung pada setiap kasus tertentu. Untuk apa nilainya, saya menduga bahwa umumnya ketika seseorang (seperti OP) meminta konversi ke daftar, mereka secara implisit berarti daftar tipe data Python biasa, dalam hal ini mengapung atau bilangan bulat, dan bukan daftar jenis skalar numpy . Terima kasih telah menunjukkan ini: Saya telah mengedit jawaban untuk menyertakan catatan tentang itu.
Peter Hansen

Sejalan dengan itu: np.array([[0, 'one'], ['two', 3]]).tolist() -> [['0', 'one'], ['two', '3']]
keithpjolley

11

Metode .tol numpy menghasilkan daftar bersarang jika bentuk array numpy adalah 2D.

jika daftar datar diinginkan, metode di bawah ini berfungsi.

import numpy as np
from itertools import chain

a = [1,2,3,4,5,6,7,8,9]
print type(a), len(a), a
npa = np.asarray(a)
print type(npa), npa.shape, "\n", npa
npa = npa.reshape((3, 3))
print type(npa), npa.shape, "\n", npa
a = list(chain.from_iterable(npa))
print type(a), len(a), a`

5

tolist()berfungsi dengan baik bahkan jika menemukan array bersarang, katakanlah sebuah panda DataFrame;

my_list = [0,1,2,3,4,5,4,3,2,1,0]
my_dt = pd.DataFrame(my_list)
new_list = [i[0] for i in my_dt.values.tolist()]

print(type(my_list),type(my_dt),type(new_list))


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.