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
    ...
    >>>
    这次没有出现错误,解决了刚才的问题。

  • 相关阅读:
    微信小程序组件loading
    微信小程序组件toast
    微信小程序组件modal
    Thread was being aborted.
    Linux(Contos7.5)环境搭建之Linux远程登录(一)
    Method 'ExecuteAsync' in type 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' does not have an implementation
    Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter]
    Visual Studio 调试时无法命中断点
    springjdbc使用c3p0连接池报错 java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
    JUnit initializationError错误
  • 原文地址:https://www.cnblogs.com/chamie/p/4865425.html
Copyright © 2011-2022 走看看