Pycharm: ctrl+函数名:快速查找函数用法
Pycharm: debug功能无法使用:是否打了断点?将ideal文件删除重新打开.py文件试试看
Pycharm默认的代码格式化:Ctrl+Shift+Alt+L,消除所以因为格式问题产生的波浪线提示,而且将所有代码按照规范进行重新排版。
print()多个参数时,默认情况是连续打印没有换行的,如果需要换行输出结果更加清晰,则只需在最后加sep’\n’
例:print(docList, fullText, classList, sep='\n')
使用numpy.ones()/zero()创建函数的时候,参数(row,column)要打括号
例:weight = numpy.ones((column, 1))
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’“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
报错: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矢量化,才能认为对每个元素进行指数操作
math.exp(-4*1000000*-0.0641515994108)
try:
ans = math.exp(200000)
except OverflowError:
ans = float('inf')
numpy.sign()
函数用法: