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

时间: 2024-11-10 01:33:44

python问题:ValueError: operands could not be broadcast together with shapes (100,3) (3,1)的相关文章

Python Theano ValueError: y_i value out of bounds

参考 https://groups.google.com/forum/#!topic/theano-users/tY3fNAPYd9k 这个问题是由于outs的数量没有设置对. 里面写到 “except that you should specify "n_out=6", because there are 6 different target classes (numbered from 0 to 5 inclusively). ” 也就是说n_out设置为6的话,Test_Y中的l

Python Numpy ValueError: data type must provide an itemsize

天朝网络锁国,百度找了半个小时找不出来原因,只能谷歌 谷歌第一条就是,顿时感觉幸福感来的太突然 原因是输入的矩阵均是字符串(从文件里读的) 那么就需要批量转数组,一行一行的转. 下面是我的代码: rownum = 0 f = open(train_Y_path) for line in f.readlines(): train_Y_matrix[rownum] = map(float,line.strip('\n ').split(' ')) rownum += 1 print train_Y_

Python中ValueError: invalid literal for int() with base 10 的实用解决办法

今天在写爬虫程序的时候由于要翻页,做除法分页的时候出现了 1 2 totalCount = '100' totalPage = int(totalCount)/20 ValueError: invalid literal for int() with base 10的错误 网上同样的错误有人建议用round(float(“1.0″)),但是解决不了我这个问题,round(float(“1.0″))是用于解决浮点数转换为整形数的, 而我这个则是因为原字符串转换为整形后做除法,虽然一段时间内可能不报

Python Issue: ValueError unknown locale: UTF-8 on OS X (Spyder)

In your bash_profile you lack of something. add export LANG="en_US.UTF-8" export LC_COLLATE="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" export LC_MESSAGES="en_US.UTF-8" export LC_MONETARY="en_US.UTF-8" exp

在Python中递归函数调用举例and匿名函数lambda求1~100的和及计算阶乘举例

1.递归列出目录里的文件的脚本举例列出目录中的文件可以通过下面方法:os.listdir() In [1]: import os In [4]: os.listdir('/root') Out[4]: ['.tcshrc', '.bash_history', '.bashrc', 'ENV', '.cache', '.config', '.cshrc', '.bash_logout', 'python', '.ssh', 'shell', '.bash_profile', '.ipython',

numpy笔记

通过下标范围获取的新的数组是原始数组的一个视图.它与原始数组共享同一块数据空间,会一起修改 >>> b = a[3:7] # 通过下标范围产生一个新的数组b,b和a共享同一块数据空间 >>> b array([101, 4, 5, 6]) >>> b[2] = -10 # 将b的第2个元素修改为-10 >>> b array([101, 4, -10, 6]) >>> a # a的第5个元素也被修改为10 array

02_numpy

numpy get started 导入numpy库,并查看numpy版本 import numpy as np np.__version__ '1.13.0' import matplotlib.pyplot as plt cat = plt.imread('cat.jpg') print(cat) [[[231 186 131] [232 187 132] [233 188 133] ..., [100 54 54] [ 92 48 47] [ 85 43 44]] [[232 187 13

机器学习笔记(1)

今天按照<机器学习实战>学习 k-邻近算法,输入KNN.classify0([0,0],group,labels,3)的时候总是报如下的错误: Traceback (most recent call last): File "<pyshell#75>", line 1, in <module> KNN.classify0([0,0],group,labels,3) File "KNN.py", line 16, in classi

numpy 可用的常规函数

该部分位于numpy - ref - 1.14.5中的2.8 available ufuncs 1 数学运算 加法规则: numpy.add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'add'> x1 ,x2 - number,ndarray,Iterable 均可,实际上一般为ndarray