Bagaimana cara mengubah daftar daftar sederhana menjadi array numpy? Barisnya adalah masing-masing sublists dan setiap baris berisi elemen dalam sublist.
Bagaimana cara mengubah daftar daftar sederhana menjadi array numpy? Barisnya adalah masing-masing sublists dan setiap baris berisi elemen dalam sublist.
Jawaban:
Jika daftar daftar Anda berisi daftar dengan jumlah elemen yang bervariasi maka jawaban Ignacio Vazquez-Abrams tidak akan berfungsi. Sebaliknya ada setidaknya 3 opsi:
1) Buat array array:
x=[[1,2],[1,2,3],[1]]
y=numpy.array([numpy.array(xi) for xi in x])
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'numpy.ndarray'>
2) Buat susunan daftar:
x=[[1,2],[1,2,3],[1]]
y=numpy.array(x)
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'list'>
3) Pertama, buat daftar panjangnya sama:
x=[[1,2],[1,2,3],[1]]
length = max(map(len, x))
y=numpy.array([xi+[None]*(length-len(xi)) for xi in x])
y
>>>array([[1, 2, None],
>>> [1, 2, 3],
>>> [1, None, None]], dtype=object)
>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])
Karena ini adalah pencarian teratas di Google untuk mengubah daftar daftar menjadi array Numpy, saya akan menawarkan yang berikut meskipun pertanyaannya adalah 4 tahun:
>>> x = [[1, 2], [1, 2, 3], [1]]
>>> y = numpy.hstack(x)
>>> print(y)
[1 2 1 2 3 1]
Ketika saya pertama kali berpikir untuk melakukannya dengan cara ini, saya cukup senang dengan diri saya sendiri karena sangat sederhana. Namun, setelah menghitungnya dengan daftar daftar yang lebih besar, sebenarnya lebih cepat untuk melakukan ini:
>>> y = numpy.concatenate([numpy.array(i) for i in x])
>>> print(y)
[1 2 1 2 3 1]
Perhatikan bahwa jawaban Bastiaan # 1 tidak membuat daftar terus menerus tunggal, maka saya menambahkan concatenate
.
Ngomong-ngomong ... Saya lebih suka hstack
pendekatan untuk itu penggunaan elegan Numpy.
Sekali lagi, setelah mencari masalah mengkonversi daftar bersarang dengan level N menjadi array N-dimensi, saya tidak menemukan apa-apa, jadi inilah cara saya mengatasinya:
import numpy as np
new_array=np.array([[[coord for coord in xk] for xk in xj] for xj in xi], ndmin=3) #this case for N=3
[...[...[...]]]
bagian itu. Anda hanya perlu menelepon np.array
, dengan ndmin=number-of-list-layers
. (meskipun dalam kasus saya, saya perlu ndmin=number-of-list-layers-minus-1
untuk beberapa alasan, yang lain membuat lapisan tambahan - perlu diselidiki)
np.array
hanya "membungkus" daftar-daftar terdalam daripada mengubahnya menjadi array numpy.
Saya memiliki daftar daftar dengan panjang yang sama. Bahkan Ignacio Vazquez-Abrams
jawaban itu tidak berhasil untuk saya. Saya mendapat array numpy 1-D yang elemennya adalah daftar. Jika Anda menghadapi masalah yang sama, Anda dapat menggunakan metode di bawah ini
Menggunakan numpy.vstack
import numpy as np
np_array = np.empty((0,4), dtype='float')
for i in range(10)
row_data = ... # get row_data as list
np_array = np.vstack((np_array, np.array(row_data)))