2013-06-28 42 views
6

Vì vậy, tôi có một mảng NumPy lớn mà có dạng sau:Python tạo một mảng phụ nhỏ hơn từ mảng 2D NumPy lớn hơn?

data = [[2456447.64798471, 4, 15.717, 0.007, 5, 17.308, 0.019, 6, 13.965, 0.006], 
     [2456447.6482855, 4, 15.768, 0.018, 5, 17.347, 0.024, 6, 14.001, 0.023], 
     [2456447.648575, 4, 15.824, 0.02, 5, 17.383, 0.024, 6, 14.055, 0.023]] 

Tôi muốn tạo ra một mảng phụ trông như thế này:

[[4, 15.717, 5, 17.308, 6, 13.965], 
[4, 15.768, 5, 17.347, 6, 14.001], 
[4, 15.824, 5, 17.383, 6, 14.055]] 

Về cơ bản tôi muốn chọn ra cột đầu tiên , và sau đó bắt đầu từ cột thứ 4 tôi muốn chọn ra mỗi cột thứ 3. Tôi đã cố gắng tìm ra cách để tiếp cận điều này với một cái gì đó như data[1:6:?] nhưng tôi không hiểu làm thế nào để bước qua và chỉ nhận được các cột mà tôi muốn.

Ngoài ra tôi cần điều này để có thể mở rộng cho một mảng mở rộng theo chiều ngang. Vì vậy, tôi không chỉ muốn mã cứng các giá trị cột.

Trả lời

3

Điều này sẽ thực hiện thủ thuật, quy mô theo chiều ngang và chiều dọc và dễ dàng và hoạt động.

subArray = [] 
newRow = [] 
for row in data: 
    for i in xrange(0,len(row)): 
     if (i % 3 == 0): 
      continue 
     newRow.append(row[i]) 
    subArray.append(newRow) 
    newRow = [] 
+1

nếu bạn cần điều này để có thể mở rộng và không tĩnh có kích thước cho tôi knkow và tôi có thể thay đổi mã – Stephan

+0

Vâng tôi đã cố gắng để làm một cái gì đó khả năng mở rộng bởi vì thực tế của tôi mảng dữ liệu dài hơn cả chiều ngang và chiều dọc. Nếu bạn có một giải pháp có thể mở rộng sẽ tuyệt vời! –

+1

@ sTr8_Struggin XONG! – Stephan

7

Bạn có thể làm điều này:

>>> data[:, [1, 2, 4, 5, 7, 8]] 
array([[ 4. , 15.717, 5. , 17.308, 6. , 13.965], 
     [ 4. , 15.768, 5. , 17.347, 6. , 14.001], 
     [ 4. , 15.824, 5. , 17.383, 6. , 14.055]]) 
+0

những gì đang xảy ra ở đây, ký hiệu slice với một danh sách? và tại sao lại có dấu phẩy sau dấu hai chấm? – Stephan

+0

@Stephan, vì 'dữ liệu' là một mảng NumPy, nó có thể được truy cập với chỉ mục số nguyên. Danh sách cũng có thể là một mảng khác. [Các tài liệu cho nó ở đây] (http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#integer). Dấu phẩy phân cách cắt dọc theo trục. Vì vậy, 'dữ liệu [1: 2,:]' sẽ chọn hàng đầu tiên và tất cả các cột, trong khi 'dữ liệu [:, 1: 2]' sẽ chọn tất cả các hàng và cột đầu tiên. –

+0

bạn có chắc chắn 'dữ liệu [1: 2]' không nhận được mục thứ hai không? Tôi nghĩ rằng slice được 0 lập chỉ mục để 'dữ liệu [0: 1]' sẽ có được mục đầu tiên – Stephan

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