当前位置:   article > 正文

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

ppocrlabel valueerror: operands could not be broadcast together with shapes

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

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

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

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

m=np.dot(a,b)

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

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

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

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

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

扩展为所需大小的矩阵。

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

例1

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


不进行reshape就会报错。

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

例2

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

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

例3

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


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

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

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

这篇也讲的不错

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号