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

  • 相关阅读:
    SQL语句 基本查询
    NHibernate 映射基础(第三篇) 简单映射、联合主键
    NHibernate 数据查询之Linto to NHibernate (第八篇)
    NHibernate 组件基础 (第六篇)
    SQL Server聚合函数
    NHibernate 集合映射深入 (第五篇) <set>,<list>,<map>,<bag>
    2020年10月笔记
    亚马逊云服务器aws配置ssl https证书
    namecheap mx记录配置邮箱
    为 PHPer 准备的 Go 入门知识
  • 原文地址:https://www.cnblogs.com/chamie/p/4865425.html
Copyright © 2011-2022 走看看