làm thế nào để chuyển đổi danh sách 2d sang mảng 2d numpy?


83

Tôi có một danh sách 2D giống như

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

và tôi muốn chuyển đổi nó thành một mảng numpy 2d. Chúng ta có thể làm điều đó mà không cần phân bổ bộ nhớ như

numpy.zeros((3,3))

và sau đó lưu trữ các giá trị vào nó?


@Donkopotamus, Đó là do tôi nhầm lẫn ... Tôi đã đưa ra một chuỗi ... Tôi cũng làm như vậy nhưng gặp lỗi. Sau khi tôi nhận được cùng một đoạn mã từ đây, tôi đã kiểm tra vị trí thử nghiệm ... Vì vậy, nó sẽ giúp ích ... tất nhiên tôi kiểm tra tài liệu trước khi đăng ở đây ... Cảm ơn lời nhắc nhở thân thiện.
Shan

Câu trả lời:


90

Chỉ cần chuyển danh sách đến np.array:

a = np.array(a)

Bạn cũng có thể tận dụng cơ hội này để đặt giá dtypetrị mặc định không như bạn mong muốn.

a = np.array(a, dtype=...)

102
giải pháp này không hoạt động. bạn sẽ nhận được một mảng danh sách python dài.
user1816847

45
@ user1816847 Điều đó chỉ xảy ra khi danh sách 'con' có độ dài khác nhau (ví dụ: [[1,2], [1,2], [1,2,3]]. Nó hoạt động với ví dụ được đưa ra trong câu hỏi.
compie

5
Nếu các mảng con không có cùng độ dài, giải pháp này sẽ chỉ cung cấp cho bạn một mảng danh sách phức tạp (nghĩa là các danh sách bên trong sẽ không được chuyển đổi thành mảng không có cấu trúc). Điều này hoàn toàn hợp lý vì bạn không thể có một mảng 2D (ma trận) với chiều thứ hai thay đổi.
AHA

Cảm ơn bạn từ tháng 9 năm 2017 (Ubuntu 16.04 LTS). Đây là những gì tôi cần. Đơn giản hơn nhiều so với dự đoán.
SDsolar

1
Cảm ơn câu trả lời quan trọng, @compie
iedmrc

2

Tôi đang sử dụng tập dữ liệu lớn được xuất sang tệp python ở dạng

XVals1 = [.........] 
XVals2 = [.........] 

Mỗi danh sách có độ dài giống nhau. tôi sử dụng

>>> a1 = np.array(SV.XVals1)

>>> a2 = np.array(SV.XVals2)

Sau đó

>>> A = np.matrix([a1,a2])

'SV' là gì ở đây
gocen

2

chỉ cần sử dụng mã sau

c = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])

Sau đó, nó sẽ cung cấp cho bạn

bạn có thể kiểm tra hình dạng và kích thước của ma trận bằng cách sử dụng mã sau

c. hình dạng

c.ndim


2

np.array()thậm chí còn mạnh hơn những gì unutbu đã nói ở trên. Bạn cũng có thể sử dụng nó để chuyển đổi danh sách các mảng np thành một mảng dimention cao hơn, sau đây là một ví dụ đơn giản:

aArray=np.array([1,1,1])

bArray=np.array([2,2,2])

aList=[aArray, bArray]

xArray=np.array(aList)

Hình dạng của xArray là (2,3), nó là một mảng np chuẩn. Thao tác này tránh lập trình vòng lặp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.