2013-04-26 43 views
12

Hai mảng:Làm thế nào để nhân mảng 2D numpy với mảng 1D numpy?

a = numpy.array([[2,3,2],[5,6,1]]) 
b = numpy.array([3,5]) 
c = a * b 

Những gì tôi muốn là:

c = [[6,9,6], 
    [25,30,5]] 

Nhưng, tôi nhận được lỗi này:

ValueError: operands could not be broadcast together with shapes (2,3) (2) 

Làm thế nào để nhân một mảng với 1D nD mảng, trong đó len(1D-array) == len(nD array)?

Trả lời

15

Bạn cần phải chuyển đổi mảng b cho a (2, 1) hình thành mảng, sử dụng Không có hoặc numpy.newaxis trong tuple index:

import numpy 
a = numpy.array([[2,3,2],[5,6,1]]) 
b = numpy.array([3,5]) 
c = a * b[:, None] 

Đây là document.

+0

Cảm ơn! Tên của cú pháp này trong Python: '[:, None] là gì? –

+1

@Ashwin, bạn có thể tìm kiếm 'numpy.newaxis' cho nó. – HYRY

+0

Cảm ơn! Chấp nhận câu trả lời của bạn :-) –

1

chiến lược khác là reshape mảng thứ hai , vì vậy nó có cùng một số khía cạnh như các mảng đầu tiên:

c = a * b.reshape((b.size, 1)) 
print(c) 
# [[ 6 9 6] 
# [25 30 5]] 

Ngoài ra, shape thuộc tính của mảng thứ hai có thể được sửa đổi tại chỗ:

b.shape = (b.size, 1) 
print(a.shape) # (2, 3) 
print(b.shape) # (2, 1) 
print(a * b) 
# [[ 6 9 6] 
# [25 30 5]]