不积跬步无以至千里

  1. Pycharm: ctrl+函数名:快速查找函数用法
  2. Pycharm: debug功能无法使用:是否打了断点?将ideal文件删除重新打开.py文件试试看
  3. Pycharm默认的代码格式化:Ctrl+Shift+Alt+L,消除所以因为格式问题产生的波浪线提示,而且将所有代码按照规范进行重新排版。
  4. print()多个参数时,默认情况是连续打印没有换行的,如果需要换行输出结果更加清晰,则只需在最后加sep’\n’
    例:print(docList, fullText, classList, sep='\n')
  5. 使用numpy.ones()/zero()创建函数的时候,参数(row,column)要打括号
    例:weight = numpy.ones((column, 1))
  6. python 中__name__ = ‘main’ 的作用,到底干嘛的?
    有句话经典的概括了这段代码的意义:
    “Make a script both importable and executable”
    意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
    这句话,可能一开始听的还不是很懂。下面举例说明:
    先写一个模块:
#module.py
def main():
  print "we are in %s"%__name__
if __name__ == '__main__':
  main()

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in main“,说明我们的if语句中的内容被执行了,调用了main():
  但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?
  其执行的结果是:we are in module
  但是没有显示”we are in main“,也就是说模块__name__ = ‘main’ 下面的函数没有执行。这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。
总结一下:
  如果我们是直接执行某个.py文件的时候,该文件中那么”name == ‘main’“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。
  这个功能还有一个用处:调试代码的时候,在”if name == ‘main’“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

  1. 怎么样对一个矩阵中的元素进行函数操作
    分两种情况:一种是numpy自带的内建函数具可以完成,但是更多情况下我们想对矩阵元素进行更加复杂的操作,因此我们就需要自己进行设置 了。直接上代码:
def sigmoid(inX):
    import math
    return 1.0 / (1 + math.exp(-inX))
h = numpy.vectorize(sigmoid)(dataMatrix * weight)  # h是100*1列矩阵

dataMatrix 和weight是两个矩阵,他们做乘法得到的是一个列矩阵作为sigmoid()函数的参数
  这段代码的意思就是对dataMatrix * weight这个矩阵中的每一个元素都进行sigmoid()函数操作。
  最重要的就是numpy.vectorize(sigmoid)这部分,其含义就是将sigmoid()这个函数进行矢量化,只有这样才能够对每个元素进行操作。而且这种方法运行速度(因为内部是拿C语言实现的)

  1. math.exp(-4*1000000*-0.0641515994108)
    报错:math range errormath range error
    原因:math.exp计算的数字以小数表示,超过110000位数。这稍微超出了Double的范围,因此会导致溢出。
    解决方法:
try:
    ans = math.exp(200000)
except OverflowError:
    ans = float('inf')
  1. readlines()readline() 不一样!!!!!!!!!!打代码的时候要看清楚!

猜你喜欢

转载自blog.csdn.net/weixin_43125502/article/details/83346219