ValueError: operands could not be broadcast together with shapes (9,8) (8,9)

在进行矩阵计算的时候遇到的错误,为了方便理解,以3*2和2*3的矩阵为例。

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

import numpy as np
a=np.array([[1,2],[3,4],[5,6]])
b=np.array([[1,1,1],[2,2,2]])
print(a*b)

这里是想要进行矩阵乘法,结果报错。

m=np.dot(a,b)

要想进行矩阵乘法需要使用np.dot();

直接a*b被认为是numpy中元素一一对应的方式进行计算的,其中隐式的将一个向量复制到每一行而生成一个矩阵。这种隐式地复制向量到很多位置的方式,被称为广播(broadcast)。

要想进行广播需要满足三个条件:

1.当两个矩阵shape相同的时候,直接进行计算。

2.当两个矩阵shape不相同的时候,当且仅当不相同的两个轴的其中一个长度为1的时候,就会沿着这个轴,将其他方向的值复制

扩展为所需大小的矩阵。

3.输出的数组的大小是输入数组的各个轴的最大值。

例1

a=np.array([[1,2],[3,4],[5,6]])
b=np.array([1,2,1])
print(a*b)


不进行reshape就会报错。

这里a是3*2的,b是1*3的,行满足,列不满足。满足第二个条件

例2

a=np.array([[1,2],[3,4],[5,6]])
b=np.array([1,2,1]).reshape((3,1))
print(a*b)


[[1 2]
 [6 8]
 [5 6]]

这里a是3*2,b是3*1,满足第二个条件。

例3

a=np.array([[1],[3],[5]])
b=np.array([1,2,1,2])
print(a+b)


[[2 3 2 3]
 [4 5 4 5]
 [6 7 6 7]]


这里a被复制了三次,构成4列;b被复制了三次,构成3行。

这个例子中a是3*1的,b是1*4的,输入最大值是3*4。满足第三个条件。

-----------------------------------------------------------------------------------------------------

这篇也讲的不错

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值