不积跬步无以至千里

  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. 怎么样对一个矩阵中的元素进行函数操作

报错:TypeError: only size-1 arrays can be converted to Python scalars
分两种情况:一种是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语言实现的)
  #正常相乘都是没有问题的,问题在于进行exp()操作时,必须使用vectorize矢量化
#因为指数,不能直接对矩阵进行指数操作,我们想当然的认为是对每个矩阵,但是其实不是
#所以,必须vectorize矢量化,才能认为对每个元素进行指数操作

  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() 不一样!!!!!!!!!!打代码的时候要看清楚!
  2. Python 直接赋值、浅拷贝和深度拷贝解析 | 菜鸟教程 http://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
  3. errArr[predictedVals == labelMat] = 0:这种操作方式简直厉害,括号内可以理解为一个判断条件,如果判断条件争取,则进行操作。而且注意到此处都是数组(抑或列表),因此是将其中的每一个元素进行一一判断,并一一赋值。厉害!
  4. numpy.sign()函数用法:
    大于0的返回1.0
    小于0的返回-1.0
    等于0的返回0.0
    13.numpy.eye(N,M=None, k=0, dtype=)
    关注第一个第三个参数就行了
    第一个参数:输出方阵(行数=列数)的规模,即行数或列数
    第三个参数:默认情况下输出的是对角线全“1”,其余全“0”的方阵,如果k为正整数,则在右上方第k条对角线全“1”其余全“0”,k为负整数则在左下方第k条对角线全“1”其余全“0”。
    14.numpy.mean(a, axis, dtype, out,keepdims )
    mean()函数功能:求取均值
    经常操作的参数为axis,以m * n矩阵举例:
    axis 不设置值,对 mn 个数求均值,返回一个实数
    axis = 0:压缩行,对各列求均值,返回 1
    n 矩阵
    axis =1 :压缩列,对各行求均值,返回 m *1 矩阵
    15.numpy. var()
    函数功能:求解方差
    函数用法:var(X) %与var(X,0)相同
    var(X,W) ;var(X,W,dim)
    % 1. W可以取0或1,取0求样本方差的无偏估计值(除以N-1;对应取1求得的是方差(除以N),
    % 2. W也可以是向量,但必须与X中的第一个维度数相同,即length(W)= size(X,1)
    var(X ,0 ,dim) % 除以N-1 ;dim =1 对每列操作 dim = 2 对每行操作
    var(X ,1 ,dim) % 除以N; dim =1 对每列操作 dim = 2 对每行操作

你可能感兴趣的:(Python学习,Pycharm,Python)