2013-08-13 43 views
10

Tôi đang sử dụng gấu trúc.Series và np.ndarray.Làm thế nào để chuyển đổi ndarray thành mảng?

Mã này là như thế này

>>> t 
array([[ 0., 0., 0.], 
     [ 0., 0., 0.], 
     [ 0., 0., 0.]]) 
>>> pandas.Series(t) 
Exception: Data must be 1-dimensional 
>>> 

Và tôi Trie để chuyển đổi nó thành mảng 1 chiều:

>>> tt = t.reshape((1,-1)) 
>>> tt 
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) 

tt vẫn còn đa chiều vì có đôi '['.

Vậy làm thế nào để tôi có được một biến đổi thực sự thành mảng?

Sau khi tìm kiếm, it says they are the same. Tuy nhiên trong tình huống của tôi, họ không làm việc như vậy.

Trả lời

15

Một cách khác là sử dụng np.ravel:

>>> np.zeros((3,3)).ravel() 
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 

Tầm quan trọng của ravel qua flattenravel chỉ bản sao dữ liệu nếu cần thiết và thường trả về một cái nhìn, trong khi flatten sẽ luôn luôn trả về một bản sao của dữ liệu.

Để sử dụng Reshape để làm phẳng các mảng:

tt = t.reshape(-1) 
4

Sử dụng .flatten:

>>> np.zeros((3,3)) 
array([[ 0., 0., 0.], 
     [ 0., 0., 0.], 
     [ 0., 0., 0.]]) 
>>> _.flatten() 
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 

EDIT: Như đã chỉ ra, điều này trả về một bản sao của các đầu vào trong mọi trường hợp. Để tránh bản sao, hãy sử dụng .ravel theo đề xuất của @Ophion.

+2

'.flatten' trả về một bản sao chứ không phải dạng xem, vì vậy thường không phải là tùy chọn đầu tiên của bạn. – Jaime

+0

@Jaime: cảm ơn, tôi đã lưu ý điều đó. (Và +1 cho Ophion để chỉ ra '.ravel' ... rõ ràng là tôi không dùng NumPy đủ.) – nneonneo

1
tt = array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) 

oneDvector = tt.A1 

Đây là phương pháp duy nhất giải quyết vấn đề của dấu ngoặc kép, đó là chuyển đổi sang mảng 1D rằng NĐ ma trận.

Các vấn đề liên quan