2009-12-27 2 views

ответ

236

Использование tolist():

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

Обратите внимание, что это преобразует значения из любого типа NumPy они могут иметь (например, np.int32 или np.float32) до «ближайшего совместимого типа Python» (в списке) , Если вы хотите сохранить типы данных numpy, вместо этого вы можете вызвать list() в своем массиве, и в итоге вы получите список numpy scalars. (Благодаря Mr_and_Mrs_D для указания, что в комментарии.)

+0

Если ваш список float32 'tolist', он преобразует его в' floats '- это нежелательно. Использование 'list (myarray)' не страдает от этого - почему мы предпочитаем «список»? –

+0

@Mr_and_Mrs_D Вы предполагаете, что, несмотря на то, что у вас есть плавающие массивы, вы хотите, чтобы получившийся список был целым числом? Это совсем другой вопрос ... и, конечно же, вам нужно будет указать, что, несмотря на значения float32, все они будут неотъемлемыми. В любом случае, если бы у вас была такая ситуация, я полагаю, что «myarray.astype (np.int32) .tolist()» будет вариантом и явным образом о том, что вы пытаетесь выполнить. (И, наконец, 'list (array_of_type_float32)' не дает целых чисел здесь, когда я его пробовал ... поэтому я не знаю, что вы просите.) –

+0

Я никогда не упоминал целые числа - попробуйте 'float32_array = np.array ([0,51764709], np.float32); печати (float32_array.tolist()); print (list (float32_array)) ' –

37

Numpy массивы имеют tolist method:

In [1]: arr=np.array([[1,2,3],[4,5,6]]) 

In [2]: arr.tolist() 
Out[2]: [[1, 2, 3], [4, 5, 6]] 
3

Метод NumPy .tolist производит вложенные массивы, если NumPy форма массива 2D.

Если требуются плоские списки, работает нижеописанный метод.

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` 
Смежные вопросы