2011-10-03 28 views
6

Tôi muốn vẽ một đối tượng có hình dạng ndarray numpy (n,) thành một hình dạng (n, 1). Điều tốt nhất tôi đã đi lên với là để cuộn chức năng _to_col của riêng tôi:numpy: cú pháp/thành ngữ để truyền mảng (n,) vào mảng (n, 1)?

def _to_col(a): 
    return a.reshape((a.size, 1)) 

Nhưng thật khó cho tôi để tin rằng một hoạt động phổ biến như chưa được xây dựng vào cú pháp NumPy của. Tôi nghĩ rằng tôi chỉ không thể đánh vào đúng tìm kiếm của Google để tìm nó.

Trả lời

9

Tôi muốn sử dụng như sau:

a[:,np.newaxis] 

Một thay thế (nhưng có lẽ hơi ít rõ ràng hơn) cách để viết những điều tương tự là:

a[:,None] 

Tất cả những điều trên (bao gồm cả phiên bản của bạn) là các hoạt động liên tục trong thời gian.

+0

Để thêm một trục đến cuối của một mảng thứ 2ngày hoặc cao hơn, sử dụng một dấu chấm lửng thay vì một dấu hai chấm: 'a [..., None]' bao gồm nhiều kích thước khi cần thiết. Sau đó, 'a.shape' sẽ đi từ, ví dụ,' (n, m) 'sang' (n, m, 1) '. – askewchan

2

np.expand_dims là yêu thích của tôi khi tôi muốn thêm trục tùy ý.

Không có hoặc np.newaxis tốt cho mã không cần phải có trục linh hoạt. (Câu trả lời aix của)

>>> np.expand_dims(np.arange(5), 0).shape 
(1, 5) 
>>> np.expand_dims(np.arange(5), 1).shape 
(5, 1) 

ví dụ sử dụng: hạ thấp một mảng bằng bất kỳ trục cho

>>> x = np.random.randn(4,5) 
>>> x - x.mean(1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: shape mismatch: objects cannot be broadcast to a single shape 


>>> ax = 1 
>>> x - np.expand_dims(x.mean(ax), ax) 
array([[-0.04152658, 0.4229244 , -0.91990969, 0.91270622, -0.37419434], 
     [ 0.60757566, 1.09020783, -0.87167478, -0.22299015, -0.60311856], 
     [ 0.60015774, -0.12358954, 0.33523495, -1.1414706 , 0.32966745], 
     [-1.91919832, 0.28125008, -0.30916116, 1.85416974, 0.09293965]]) 
>>> ax = 0 
>>> x - np.expand_dims(x.mean(ax), ax) 
array([[ 0.15469413, 0.01319904, -0.47055919, 0.57007525, -0.22754506], 
     [ 0.70385617, 0.58054228, -0.52226447, -0.66556131, -0.55640947], 
     [ 1.05009459, -0.27959876, 1.03830159, -1.23038543, 0.73003287], 
     [-1.90864489, -0.31414256, -0.04547794, 1.32587149, 0.05392166]]) 
Các vấn đề liên quan