2009-12-15 71 views
6

Xin chào Tôi có một chuỗi dữ liệu 1000 với 1500 điểm trong mỗi.Làm cách nào để thêm hàng và cột vào một mảng NUMPY?

Chúng tạo thành một mảng Numpy kích thước (1000x1500) được tạo bằng cách sử dụng np.zeros ((1500, 1000)) và sau đó điền dữ liệu.

Bây giờ nếu tôi muốn mảng phát triển để nói 1600 x 1100 thì sao? Tôi có phải thêm mảng bằng cách sử dụng hstack và vstack hoặc có cách nào tốt hơn không?

Tôi muốn dữ liệu đã có trong phần 1000x1500 của mảng không được thay đổi, chỉ có dữ liệu trống (số không) được thêm vào dưới cùng và bên phải, về cơ bản.

Cảm ơn.

Trả lời

3

Nếu bạn muốn số không trong các phần tử đã thêm, my_array.resize((1600, 1000)) sẽ hoạt động. Lưu ý rằng điều này khác với numpy.resize(my_array, (1600, 1000)), trong đó các dòng trước đó được nhân bản, có thể không phải là những gì bạn muốn.

Nếu không, ví dụ nếu bạn muốn tránh các phần tử khởi tạo bằng 0, có thể không cần thiết), bạn có thể sử dụng hstackvstack để thêm mảng chứa các phần tử mới; numpy.concatenate() (xem pydoc numpy.concatenate) cũng nên hoạt động (nó chỉ tổng quát hơn, theo như tôi hiểu).

Trong cả hai trường hợp, tôi sẽ đoán rằng một khối bộ nhớ mới phải được cấp phát để mở rộng mảng và tất cả các phương thức này mất cùng một lúc.

+0

Chỉ cần lưu ý rằng điều này dường như không giữ nguyên dữ liệu trong trường hợp bạn chỉ muốn mở rộng tập dữ liệu: >>> a = numpy.array ([[1,2], [ 3,4]]) >>> một mảng ([[1, 2], [3, 4]]) >>> a.resize ((2,4)) Traceback (cuộc gọi gần đây nhất cuối cùng): Tệp "", dòng 1, trong ValueError: không thể thay đổi kích thước tham chiếu mảng hoặc được tham chiếu bởi một mảng khác theo cách này. Sử dụng chức năng thay đổi kích thước >>> a = numpy.array (a) >>> a.resize ((2,4)) >>> a mảng ([[1, 2, 3, 4], [0, 0, 0, 0]]) – mathtick

0

Bạn nên sử dụng reshape() và/hoặc resize() tùy thuộc vào yêu cầu chính xác của bạn.

Nếu bạn muốn chương và câu từ các tác giả, bạn có lẽ nên đăng bài trên bảng thảo luận gọn gàng hơn.

7

này nên làm những gì bạn muốn (tức, sử dụng mảng 3x3 và mảng 4x4 để đại diện cho hai mảng trong OP)

>>> import numpy as NP 
>>> a = NP.random.randint(0, 10, 9).reshape(3, 3) 
>>> a 
>>> array([[1, 2, 2], 
      [7, 0, 7], 
      [0, 3, 0]]) 

>>> b = NP.zeros((4, 4)) 

mapping một trên để b:

>>> b[:3,:3] = a 

>>> b 
    array([[ 1., 2., 2., 0.], 
      [ 7., 0., 7., 0.], 
      [ 0., 3., 0., 0.], 
      [ 0., 0., 0., 0.]]) 
+0

Tôi gặp lỗi từ mã đó. Không nên dòng cuối cùng là b [: 3,: 3] = a?Tất cả như nhau, cộng với một kể từ khi tôi đã làm điều đó nó làm việc và đó là những gì tôi đang tìm kiếm. –

+0

@ kηives yes, lỗi đánh máy, cảm ơn bạn - chỉnh sửa bài đăng của tôi ngay bây giờ. – doug

2

Không có vấn đề gì, bạn sẽ bị kẹt phân bổ lại một đoạn bộ nhớ, do đó, việc bạn sử dụng arr.resize(), np.concatenate mới không thành vấn đề , hstack/vstack, v.v. Lưu ý rằng nếu bạn đang tích luỹ nhiều dữ liệu tuần tự, các danh sách Python thường hiệu quả hơn.

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