2009-12-27 85 views

Trả lời

236

Sử dụng tolist():

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

Lưu ý rằng điều này chuyển đổi các giá trị từ bất cứ loại NumPy họ có thể có (ví dụ np.int32 hoặc np.float32) để "loại Python tương thích gần nhất" (trong danh sách) . Nếu bạn muốn bảo toàn các kiểu dữ liệu khó khăn, bạn có thể gọi danh sách() trên mảng của bạn thay vào đó, và bạn sẽ kết thúc với một danh sách numpy scalars. (Nhờ Mr_and_Mrs_D đã chỉ ra rằng trong một chú thích.)

+0

Nếu danh sách của bạn là float32 'tolist' sẽ chuyển nó thành' phao '- điều đó không được mong muốn. Sử dụng 'list (myarray)' không chịu đựng điều này - tại sao chúng ta nên thích 'tolist' hơn? –

+0

@Mr_and_Mrs_D là bạn đề xuất rằng, mặc dù có nổi trong mảng của bạn, bạn muốn có danh sách kết quả là số nguyên? Đó là một câu hỏi hoàn toàn khác ... và tất nhiên bạn phải xác định rằng mặc dù là giá trị float32, tất cả chúng đều là không thể tách rời. Dù sao, nếu bạn có tình huống đó, tôi đoán làm 'myarray.astype (np.int32) .tolist()' sẽ là một lựa chọn, và rõ ràng về những gì bạn đang cố gắng thực hiện. (Và cuối cùng, 'list (array_of_type_float32)' không cung cấp số nguyên ở đây khi tôi thử nó ... vì vậy tôi không biết bạn đang hỏi gì.) –

+0

Tôi chưa bao giờ đề cập đến số nguyên - hãy thử 'float32_array = np.array ([0,51764709], np.float32); in (float32_array.tolist()); print (danh sách (float32_array)) ' –

37

mảng NumPy có một 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

Phương pháp ToList NumPy tạo mảng lồng nhau nếu hình dạng mảng NumPy là 2D.

nếu muốn danh sách phẳng, phương thức bên dưới hoạt động.

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` 
Các vấn đề liên quan