- 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)
报错:math range errormath range error
原因:math.exp计算的数字以小数表示,超过110000位数。这稍微超出了Double的范围,因此会导致溢出。
解决方法:
try:
ans = math.exp(200000)
except OverflowError:
ans = float('inf')
- readlines() 和 readline() 不一样!!!!!!!!!!打代码的时候要看清楚!
- Python 直接赋值、浅拷贝和深度拷贝解析 | 菜鸟教程 http://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
- errArr[predictedVals == labelMat] = 0:这种操作方式简直厉害,括号内可以理解为一个判断条件,如果判断条件争取,则进行操作。而且注意到此处都是数组(抑或列表),因此是将其中的每一个元素进行一一判断,并一一赋值。厉害!
-
numpy.sign()
函数用法:
大于0的返回1.0
小于0的返回-1.0
等于0的返回0.0
13.numpy.eye(N,M=None, k=0, dtype=<type ‘float’>)
关注第一个第三个参数就行了
第一个参数:输出方阵(行数=列数)的规模,即行数或列数
第三个参数:默认情况下输出的是对角线全“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 对每行操作