2013-04-26 690 views
12

两个数组:如何将numpy二维数组与numpy一维数组相乘?

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

我要的是:

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

但是,我得到这个错误:

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

如何钕阵列1D数组,其中len(1D-array) == len(nD array)

回答

15

你需要数组转换B到A(2,1)形状数组,使用没有或numpy.newaxis在索引元组:

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

这里是document

+0

谢谢!这个语法在Python中的名称是什么:'[:,None]'? – 2013-04-26 06:14:29

+1

@Ashwin,你可以为它搜索'numpy.newaxis'。 – HYRY 2013-04-26 06:18:36

+0

谢谢!接受你的回答:-) – 2013-04-26 07:05:26

1

另一种策略是reshape所述 第二阵列,因此它具有相同的维数与第一阵列:

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

可替代地,第二阵列的shape属性可以就地进行修改:

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