Python3 numpy乘法:无法与形状(10,10000)(10000,10)一起广播

时间:2018-12-16 00:59:16

标签: python python-3.x numpy valueerror elementwise-operations

在此指令中,我在python3中使用numpy遇到问题:

res = ( np.multiply(error, v_sigmop ))

我正在尝试逐个元素相乘,但是出现了这个奇怪的错误:

res = ( np.multiply(error, v_sigmop ))
ValueError: operands could not be broadcast together with shapes (10,10000) (10000,10)

此操作不是非法的,因为列数与第二个数组的行数匹配...

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

我认为您可能正在尝试对形状为(r1,c)(c,r2)的2个矩阵进行选择

您可以使用A.dot(B)解决问题,该问题将包含2个矩阵。

这是示例:

>>> a = np.arange(12).reshape((3,4))
>>> b = np.arange(8).reshape((4,2))
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> b
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])
>>> a.dot(b)
array([[ 28,  34],
       [ 76,  98],
       [124, 162]])

希望它将对您有帮助!

修改

因为您不需要多个2个矩阵,所以您希望将多个作为标量,但不是您要进行多个标量,这意味着您不能使用多个2个矩阵,例如:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

乘以

array([[0, 1],
       [2, 3],
       [4, 5]])

对于多个2标量,该操作无效。

您只有以下操作:

>>> a = np.arange(12).reshape((3,4))
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])


# Multiple all elements with a scalar
>>> np.multiply(a,0)
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])


# Multiple each column with a column
>>> b = np.arange(3).reshape((3,1))
>>> b
array([[0],
       [1],
       [2]])
>>> np.multiply(a,b)
array([[ 0,  0,  0,  0],
       [ 4,  5,  6,  7],
       [16, 18, 20, 22]])


# Multiple each row with a row
>>> b = np.arange(4).reshape((1,4))
>>> b
array([[0, 1, 2, 3]])
>>> np.multiply(a,b)
array([[ 0,  1,  4,  9],
       [ 0,  5, 12, 21],
       [ 0,  9, 20, 33]])


# Multiple each element with the same shape
>>> b = np.arange(12).reshape((3,4))
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> np.multiply(a,b)
array([[  0,   1,   4,   9],
       [ 16,  25,  36,  49],
       [ 64,  81, 100, 121]])