zoukankan      html  css  js  c++  java
  • 【python问题系列--4】ValueError: operands could not be broadcast together with shapes (100,3) (3,1)

    背景:dataMatrix是(100,3)的列表,labelMat是(1,100)的列表,weights是(3,1)的数组,属性如下代码所示:

    >>> import types
    >>> type(dataMatrix)
    <type 'list'>
    >>> type(labelMat)
    <type 'list'>
    >>> type(weights)
    <type 'numpy.ndarray'>

    我的代码:

    >>> dataMatrix=dataArr
    >>> labelMat=labelMat.transpose()
    >>> m,n=shape(dataMatrix)
    >>> alpha=0.001
    >>> maxCycles=500
    >>> weights=ones((n,1))
    >>> for k in range(maxCycles):
    ...     h=logRegres.sigmoid(dataMatrix*weights)
    ...     error=(labelMat-h)
    ...     weights=weights+alpha*dataMatrix.transpose()*error
    ...
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    ValueError: operands could not be broadcast together with shapes (100,3) (3,1)

    解释:

    本人出现的问题是,dataMatrix,weights的大小分别为(100,3) (3,1), 是<type 'list'>、<numpy.ndarray>类型,而不是<matrix>类型,直接进行乘积C = A*B, 之后,提示上述错误,原因是数组大小“不一致”, 解决方案,不用"*"符号,使用numpy中的dot()函数,可以实现两个二维数组的乘积,或者将数组类型转化为矩阵类型,使用"*"相乘,具体如下:

    第一种方法:

    >>> dataMatrix=dataArr
    >>> labelMat=labelMat.transpose()
    >>> m,n=shape(dataMatrix)
    >>> alpha=0.001
    >>> maxCycles=500
    >>> weights=ones((n,1))

    >>> for k in range(maxCycles):
    ...     h=logRegres.sigmoid(dot(dataMatrix,weights))
    ...     error=(labelMat-h)
    ...     weights=weights+alpha*dataMatrix.transpose()*error
    ...
    Traceback (most recent call last):
      File "<stdin>", line 4, in <module>
    AttributeError: 'list' object has no attribute 'transpose'

    分析:这次没有出现上次的错误,但是这次出现的错误是指'list'没有'transpose'转置功能,我们知道只有矩阵才有转置。所以用第二种方法,直接将dataMatrix,weights都转换为矩阵,代码如下:

    第二种方法:

    >>> dataMatrix=mat(dataArr)
    >>> labelMat=mat(labelMat)
    >>> m,n=shape(dataMatrix)
    >>> alpha=0.001
    >>> maxCycles=500
    >>> weights=ones((n,1))
    >>> for k in range(maxCycles):
    ...     h=logRegres.sigmoid(dataMatrix*weights)
    ...     error=(labelMat-h)
    ...     weights=weights+alpha*dataMatrix.transpose()*error
    ...
    >>>
    这次没有出现错误,解决了刚才的问题。

  • 相关阅读:
    sqlserver 库服务器导数据
    C# 关于X86/X64/AnyCpu 的关系
    VisualStudio相关序列号
    超级搜索术
    ffmypeg 视频处理类库使用方法
    远程桌面连接
    关于VS2013调试IIS应用源代码时无法进入断点的问题总结
    C#访问修饰符(public,private,protected,internal,sealed,abstract)
    MySQL结构相关
    性能瓶颈定位分析
  • 原文地址:https://www.cnblogs.com/chamie/p/4865425.html
Copyright © 2011-2022 走看看