2012-03-30 35 views
6

Phép nhân nhân hai vectơ không phải là vấn đề nếu cả hai đều có cùng hình dạng, nói cả hai (n, 1) hoặc cả hai (n,). Nếu một vectơ có hình dạng (n, 1) và cái kia (n,), mặc dù, * -operator trả về một cái gì đó vui nhộn.Numpy: Làm thế nào để nhân hai phần tử, hình dạng (n, 1) và (n,)?

a = np.ones((3,1)) 
b = np.ones((3,)) 
print a * b 

Ma trận nxn kết quả chứa A_ {i, j} = a_i * b_j.

Làm cách nào tôi có thể thực hiện phép nhân số nguyên tố cho số ab sau đó?

Trả lời

15

Slice các vectơ trong một cách mà làm cho trận đấu hình dạng của chúng:

a[:, 0] * b 

hoặc

a * b[:, None] 
+2

'a.reshape (-1) * b' hoặc 'một * b.reshape ((- 1 , 1)) 'là một cách khác để làm cơ bản cùng một điều. ('-1' có nghĩa là" nhiều như làm cho nó phù hợp với hình dạng này. ") – Dougal

4

Thêm một trục thứ hai để b đó ab có kích thước tương tự:

>>> a * b[:,np.newaxis] 
array([[ 1.], 
     [ 1.], 
     [ 1.]]) 

Cách khác, chuyển đổi a để phát sóng hoạt động:

>>> a.T * b 
array([[ 1., 1., 1.]]) 

(Bạn có thể muốn transpose kết quả.)

+0

Tôi nghĩ rằng giải pháp' .T' là đẹp nhất. Nó đòi hỏi ít nhất đánh máy và suy nghĩ ít nhất. –

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