Basit bir liste listesini numpy dizisine nasıl dönüştürebilirim? Satırlar ayrı alt listelerdir ve her satır alt listedeki öğeleri içerir.
Basit bir liste listesini numpy dizisine nasıl dönüştürebilirim? Satırlar ayrı alt listelerdir ve her satır alt listedeki öğeleri içerir.
Yanıtlar:
Listelerinizde çok sayıda öğe içeren listeler varsa, Ignacio Vazquez-Abrams'ın yanıtı çalışmaz. Bunun yerine en az 3 seçenek vardır:
1) Bir dizi dizi oluşturun:
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) Bir dizi liste yapın:
x=[[1,2],[1,2,3],[1]]
y=numpy.array(x)
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'list'>
3) Önce listeleri eşit uzunlukta yapın:
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]])
Bu, liste listesini Numpy dizisine dönüştürmek için Google'da en iyi arama olduğundan, 4 yaşında olmasına rağmen aşağıdakileri sunacağım:
>>> x = [[1, 2], [1, 2, 3], [1]]
>>> y = numpy.hstack(x)
>>> print(y)
[1 2 1 2 3 1]
Bunu bu şekilde yapmayı ilk düşündüğümde, kendimden oldukça memnun kaldım çünkü çok basit. Bununla birlikte, daha geniş bir liste listesiyle zamanladıktan sonra, aslında bunu yapmak daha hızlıdır:
>>> y = numpy.concatenate([numpy.array(i) for i in x])
>>> print(y)
[1 2 1 2 3 1]
@ Bastiaan'ın 1 numaralı cevabının tek bir sürekli liste yapmadığını unutmayın, bu yüzden concatenate
.
Her neyse ... hstack
Numpy'nin zarif kullanımı için yaklaşımı tercih ediyorum .
Yine, N seviyeli iç içe listelerin N-boyutlu bir diziye dönüştürülmesi sorununu araştırdıktan sonra hiçbir şey bulamadım, işte benim yolum:
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
[...[...[...]]]
parçaya ihtiyacınız olmadığını unutmayın . Sadece arayın gerek np.array
sahip ndmin=number-of-list-layers
. (benim durumumda ndmin=number-of-list-layers-minus-1
bir nedenden dolayı ihtiyacım olsa da , başka bir katman daha oluşturdu - araştırmamız gerekiyor)
np.array
onları numpy dizilerine dönüştürmek yerine en derin listeleri "sarmaya" neden olmuştur .
Eşit uzunlukta listelerin bir listesi vardı. O zaman bile Ignacio Vazquez-Abrams
cevabı benim için işe yaramadı. Öğeleri listeler olan bir 1-num numpy dizi var. Aynı sorunla karşılaştıysanız, aşağıdaki yöntemi kullanabilirsiniz
kullanım 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)))