2013-06-24 44 views
25

Tôi mới dùng Python và sần. Tôi đã tìm ra cách cắt 1 thứ nguyên: arr[atart:end] và truy cập phần tử trong mảng: el = arr[row][col].Python: cắt một mảng đa chiều

Thử một cái gì đó như slice = arr[0:2][0:2] (trong đó arr là mảng có nhiều mảng) không cho tôi 2 hàng và cột đầu tiên, nhưng lặp lại 2 hàng đầu tiên. Tôi đã làm gì, và làm thế nào để tôi cắt dọc theo một chiều không gian khác?

+0

Loại dữ liệu nào là 'arr'? Đây có phải là danh sách các danh sách không? – mgilson

+0

@mgilson Tôi đã cập nhật loại câu hỏi trong câu hỏi – SlightlyCuban

Trả lời

33

Nếu bạn sử dụng numpy, điều này rất dễ dàng:

slice = arr[:2,:2] 

hoặc nếu bạn muốn của 0,

slice = arr[0:2,0:2] 

Bạn sẽ nhận được kết quả tương tự.

* lưu ý rằng slice thực sự là tên của kiểu nội trang. Nói chung, tôi sẽ tư vấn cho đối tượng của bạn một "tên" khác.


Một cách khác, nếu bạn đang làm việc với danh sách của danh sách *:

slice = [arr[i][0:2] for i in range(0,2)] 

(Lưu ý rằng khối 0 ở đây là không cần thiết:. [arr[i][:2] for i in range(2)] cũng sẽ làm việc).

Điều tôi đã làm ở đây là tôi lấy từng hàng mong muốn 1 tại một thời điểm (arr[i]). Sau đó tôi cắt các cột tôi muốn ra khỏi hàng đó và thêm nó vào danh sách mà tôi đang xây dựng.

Nếu bạn ngây thơ thử: arr[0:2] Bạn nhận được 2 hàng đầu tiên nếu sau đó bạn cắt một lần nữa arr[0:2][0:2], bạn chỉ cần cắt hai hàng đầu tiên lại.

* Điều này thực sự hiệu quả đối với các mảng có nhiều mảng, nhưng nó sẽ chậm so với giải pháp "gốc" mà tôi đã đăng ở trên.

+0

Vì vậy, những gì hiện 'arr [0: 2] [0: 2]' thực sự làm gì so với 'arr [row] [col]'? – SlightlyCuban

+0

@SlightlyCuban - Xem câu trả lời cập nhật của tôi. – mgilson

+0

@mgilson Tôi mệt mỏi điều này và có một số kết quả khá lạ. Giả sử tôi có 'a = [[1,2,3], [4,5,6], [7,8,9]]' thì 'a [0] [:] = [1, 2, 3]' nhưng kỳ lạ đủ 'a [:] [0]' vẫn là '[1,2,3]'. Tôi sẽ nói rằng điều này nên là '[1,4,7] '. Tôi sẽ đánh giá cao nếu bạn có thể cho tôi biết những gì là sai ở đây. –