2012-09-25 46 views
48

Tôi muốn chuyển đổi mảng 1 chiều thành ma trận bằng cách chỉ định số cột trong ma trận. Một cái gì đó sẽ hoạt động như thế này:Chuyển đổi mảng 1D thành mảng 2D theo dạng số

> import numpy as np 
> A = np.array([1,2,3,4,5,6]) 
> B = vec2matrix(A,ncol=2) 
> B 
array([[1, 2], 
    [3, 4], 
    [5, 6], 
    [7, 8]]) 

Numpy có chức năng hoạt động giống như chức năng tạo sẵn của tôi "vec2matrix"? (Tôi hiểu rằng bạn có thể lập chỉ mục mảng 1D như ma trận, nhưng đó không phải là tùy chọn trong mã tôi có - Tôi cần thực hiện chuyển đổi này)

Trả lời

67

Bạn muốn reshape mảng.

B = np.reshape(A, (-1, 2)) 
3

Hãy thử một cái gì đó như:

B = np.reshape(A,(-1,ncols)) 

Bạn sẽ cần phải chắc chắn rằng bạn có thể chia số phần tử trong mảng của bạn bằng cách ncols mặc dù. Bạn cũng có thể chơi theo thứ tự các số được kéo vào B bằng cách sử dụng từ khóa order.

26

Bạn có hai lựa chọn:

  • Nếu bạn không còn muốn hình dạng ban đầu, dễ nhất là chỉ để gán một hình dạng mới cho mảng

    a.shape = (a.size//ncols, ncols) 
    

    Bạn có thể chuyển a.size//ncols bởi -1 để tính toán hình dạng thích hợp tự động. Hãy chắc chắn rằng a.shape[0]*a.shape[1]=a.size, nếu không bạn sẽ gặp phải một số vấn đề.

  • Bạn có thể có được một mảng mới với np.reshape chức năng, mà làm việc chủ yếu là giống như phiên bản trình bày ở trên

    new = np.reshape(a, (-1, ncols)) 
    

    Khi nó có thể, new sẽ chỉ là một cái nhìn của mảng ban đầu a, có nghĩa là dữ liệu được chia sẻ. Tuy nhiên, trong một số trường hợp, mảng new sẽ là bản sao thay thế. Lưu ý rằng np.reshape cũng chấp nhận từ khóa tùy chọn order cho phép bạn chuyển từ thứ tự C thành hàng lớn sang cột Fortran thứ tự lớn. np.reshape là phiên bản chức năng của phương thức a.reshape.

Nếu bạn không thể tôn trọng yêu cầu a.shape[0]*a.shape[1]=a.size, bạn bị kẹt với việc phải tạo một mảng mới. Bạn có thể sử dụng chức năng np.resize và trộn nó với np.reshape, chẳng hạn như

>>> a =np.arange(9) 
>>> np.resize(a, 10).reshape(5,2) 
+2

câu trả lời hoàn chỉnh! Đây phải là một trong những chấp nhận! – gota

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