2015-04-15 20 views
7

Tôi đang sử dụng NumPy trong Python để làm việc với các mảng. Đây là cách tôi đang sử dụng để tạo mảng dọc:Tạo các mảng NumPy theo chiều dọc trong Python

import numpy as np 
a = np.array([[1],[2],[3]]) 

Có cách đơn giản và trực tiếp hơn để tạo mảng dọc không?

+3

Đừng làm 'từ NumPy * nhập khẩu '!!! –

+0

Cảm ơn bạn đã bình luận. Tôi đã chỉnh sửa câu hỏi. – user2991243

+1

Chúng tôi cần một tính năng như MATLAB 'shift + enter' để chỉnh sửa: D – user2991243

Trả lời

11

Bạn có thể sử dụng reshape hoặc vstack:

>>> a=np.arange(1,4) 
>>> a 
array([1, 2, 3]) 
>>> a.reshape(3,1) 
array([[1], 
     [2], 
     [3]]) 
>>> np.vstack(a) 
array([[1], 
     [2], 
     [3]]) 

Ngoài ra, bạn có thể sử dụng broadcasting để định hình lại mảng của bạn:

In [32]: a = np.arange(10) 
In [33]: a 
Out[33]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

In [34]: a[:,None] 
Out[34]: 
array([[0], 
     [1], 
     [2], 
     [3], 
     [4], 
     [5], 
     [6], 
     [7], 
     [8], 
     [9]]) 
+0

Sẽ tốt hơn nếu bạn có thể thêm liên kết với chức năng của bạn –

+1

@BhargavRao tôi đã làm điều đó;) – Kasramvd

4

Bạn cũng có thể sử dụng np.newaxis (Xem ví dụ here)

>>> import numpy as np 
>>> np.arange(3)[:, np.newaxis] 
array([[0], 
     [1], 
     [2]]) 

Là một lưu ý phụ

Tôi vừa nhận ra rằng bạn đã sử dụng, from numpy import *. Không làm như vậy vì nhiều hàm từ thư viện chung của Python trùng với numpy (ví dụ: sum). Khi bạn import * từ numpy bạn mất chức năng của các chức năng đó. Do đó luôn sử dụng:

import numpy as np 

cũng dễ dàng nhập.

0

Tính đơn giản và trực tiếp nằm trong con mắt của đối tượng.

In [35]: a = np.array([[1],[2],[3]]) 
In [36]: a.flags 
Out[36]: 
    C_CONTIGUOUS : True 
    F_CONTIGUOUS : False 
    OWNDATA : True 
    WRITEABLE : True 
    ALIGNED : True 
    UPDATEIFCOPY : False 
In [37]: b=np.array([1,2,3]).reshape(3,1) 
In [38]: b.flags 
Out[38]: 
    C_CONTIGUOUS : True 
    F_CONTIGUOUS : False 
    OWNDATA : False 
    WRITEABLE : True 
    ALIGNED : True 
    UPDATEIFCOPY : False 

Đầu tiên ngắn hơn và sở hữu dữ liệu của nó. Vì vậy, trong một cảm giác, dấu ngoặc đơn là một nỗi đau, nhưng nó là một chủ thể khá chủ quan.

Hoặc nếu bạn muốn một cái gì đó giống như MATLAB bạn có thể sử dụng định dạng np.matrix chuỗi:

c=np.array(np.matrix('1;2;3')) 
c=np.mat('1;2;3').A 

Nhưng tôi thường không lo lắng về cờ OWNDATA. Một trong những mảng mẫu yêu thích của tôi là:

np.arange(12).reshape(3,4) 

cách khác:

np.atleast_2d([1,2,3]).T 
np.array([1,2,3],ndmin=2).T 
a=np.empty((3,1),int);a[:,0]=[1,2,3] # OWNDATA 
Các vấn đề liên quan