NumPy dizisini Python List yapısına dönüştürme?


297

NumPy dizisini Python listesine nasıl dönüştürürüm (örneğin [[1,2,3],[4,5,6]]) ve oldukça hızlı mı yaparım?

Yanıtlar:


427

Kullanım tolist():

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

Bunun, sahip oldukları numpy türünden (örn. Np.int32 veya np.float32) değerleri "en yakın uyumlu Python türüne" (bir listede) dönüştürdüğünü unutmayın. Numpy veri türlerini korumak istiyorsanız, dizinizdeki list () öğesini çağırabilirsiniz ve sonuçta numpy skaler listesi ile karşılaşırsınız . (Bir yorumda belirttiği için Mr_and_Mrs_D'ye teşekkürler.)


6
Listeniz float32 ise s'ye tolistdönüştürür floats- bu muhtemelen istenmez. Kullanmak list(myarray)bundan muzdarip değildir - neden tercih etmeliyiz tolist?
Mr_and_Mrs_D

1
@Mr_and_Mrs_D, dizinizde kayan öğe olmasına rağmen, sonuç listesinin tamsayı olmasını istediğinizi mi öneriyorsunuz? Bu tamamen farklı bir soru ... ve tabii ki float32 değerleri olmasına rağmen, hepsinin ayrılmaz olacağını belirtmelisiniz. Her neyse, bu duruma sahip myarray.astype(np.int32).tolist()olsaydınız , sanırım yapmak bir seçenek olurdu ve neyi başarmaya çalıştığınız konusunda açık. (Ve son olarak, list(array_of_type_float32)denediğimde burada tamsayı vermiyor ... bu yüzden ne istediğini bilmiyorum.)
Peter Hansen

1
Tam sayılardan hiç bahsetmedim - deneyinfloat32_array = np.array([0.51764709], np.float32); print(float32_array.tolist()); print(list(float32_array))
Mr_and_Mrs_D

2
Tamam, biri [float] 'a dönüşür ve diğeri hala [np.float32] gibi sayısal skaler float32 tipini kullanır. İnce. Bilmek güzel, ama bunun istenip istenmediği her özel duruma bağlı. Değer için, genellikle bir kişi (OP gibi) bir listeye dönüştürmeyi istediğinde, örtük olarak normal Python veri türlerinin bir listesi anlamına gelir, bu durumda kayan veya tamsayıların değil, sayısal skaler tiplerin bir listesi değil . Bunu işaret ettiğiniz için teşekkürler: Cevabı, bununla ilgili bir not içerecek şekilde düzenledim.
Peter Hansen

Bu çizgiler boyunca: np.array([[0, 'one'], ['two', 3]]).tolist() -> [['0', 'one'], ['two', '3']]
keithpjolley

11

Numpy .tolist yöntemi, numpy dizi şekli 2B ise iç içe listeler oluşturur.

düz listeler isteniyorsa, aşağıdaki yöntem işe yarar.

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()pandalar gibi iç içe bir dizi ile karşılaşsa bile iyi çalışır 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))


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.