1. numpy.mgrid
解析:
>>> np.mgrid[0:5, 0:4]
array([[[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4]],
[[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3]]])
2. np.meshgrid
>>> nx, ny = (3, 2)
>>> x = np.linspace(0, 1, nx)
>>> y = np.linspace(0, 1, ny)
>>> xv, yv = meshgrid(x, y)
>>> xv
array([[ 0. , 0.5, 1. ],
[ 0. , 0.5, 1. ]])
>>> yv
array([[ 0., 0., 0.],
[ 1., 1., 1.]])
>>> xv, yv = meshgrid(x, y, sparse=True) # make sparse output arrays
>>> xv
array([[ 0. , 0.5, 1. ]])
>>> yv
array([[ 0.],
[ 1.]])
3. Python中的下划线
[1]单下划线结尾_:只是为了避免与Python关键字的命名冲突。
[2]_单下划线开头:弱“内部使用”标识,比如"from M import *",将不导入所有以该下划线开头的对象,包括包、模块、成员等。
[3]__双下划线开头:模块内的成员,表示私有成员,外部无法直接调用。
[4]__双下划线开头和双下划线结尾__:指那些包含在用户无法控制的命名空间中的“魔术”对象或属性,比如类成员的__name__ 、__doc__、__init__、__import__、__file__等。
说明:Python中的包对应于文件夹,而模块对应于文件。
4. np.concatenate
解析:numpy.concatenate((a1, a2, ...), axis=0)
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
[3, 4, 6]])
5. np.hstack
解析:numpy.hstack(tup): Stack arrays in sequence horizontally (column wise). Equivalent to np.concatenate(tup, axis=1).
>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> np.hstack((a,b))
array([1, 2, 3, 2, 3, 4])
>>> a = np.array([[1],[2],[3]])
>>> b = np.array([[2],[3],[4]])
>>> np.hstack((a,b))
array([[1, 2],
[2, 3],
[3, 4]])
6. np.vstack
解析:numpy.vstack(tup): Stack arrays in sequence vertically (row wise). Equivalent to np.concatenate(tup, axis=0) if tup contains arrays that are at least 2-dimensional.
>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 3, 4])
>>> np.vstack((a,b))
array([[1, 2, 3],
[2, 3, 4]])
>>>
>>> a = np.array([[1], [2], [3]])
>>> b = np.array([[2], [3], [4]])
>>> np.vstack((a,b))
array([[1],
[2],
[3],
[2],
[3],
[4]])
7. np.transpose
解析:numpy.transpose(a, axes=None): Permute the dimensions of an array.
>>> x = np.arange(4).reshape((2,2))
>>> x
array([[0, 1],
[2, 3]])
>>>
>>> np.transpose(x)
array([[0, 2],
[1, 3]])
>>>
>>> x = np.ones((1, 2, 3))
>>> np.transpose(x, (1, 0, 2)).shape
(2, 1, 3)
8. numpy.flipud
解析:numpy.flipud(m): Flip array in the up/down direction.
>>> A = np.diag([1.0, 2, 3])
>>> A
array([[ 1., 0., 0.],
[ 0., 2., 0.],
[ 0., 0., 3.]])
>>> np.flipud(A)
array([[ 0., 0., 3.],
[ 0., 2., 0.],
[ 1., 0., 0.]])
9. numpy.fliplr
解析:numpy.fliplr(m): Flip array in the left/right direction.
>>> A = np.diag([1.,2.,3.])
>>> A
array([[ 1., 0., 0.],
[ 0., 2., 0.],
[ 0., 0., 3.]])
>>> np.fliplr(A)
array([[ 0., 0., 1.],
[ 0., 2., 0.],
[ 3., 0., 0.]])
10. numpy.rot90
解析:numpy.rot90(m, k=1): Rotate an array by 90 degrees in the counter-clockwise direction.
>>> m = np.array([[1,2],[3,4]], int)
>>> m
array([[1, 2],
[3, 4]])
>>> np.rot90(m)
array([[2, 4],
[1, 3]])
>>> np.rot90(m, 2)
array([[4, 3],
[2, 1]])
11. numpy.random.randn
解析:numpy.random.randn(d0, d1, ..., dn): Return a sample (or samples) from the "standard normal" distribution.
>>> np.random.randn()
2.1923875335537315 #random
>>>
>>> 2.5 * np.random.randn(2, 4) + 3
array([[-4.49401501, 4.00950034, -1.81814867, 7.29718677], #random
[ 0.39924804, 4.68456316, 4.99394529, 4.84057254]]) #random
12. numpy.ravel
解析:numpy.ravel(a, order='C'): Return a contiguous flattened array.
>>> x = np.array([[1, 2, 3], [4, 5, 6]])
>>> print(np.ravel(x))
[1 2 3 4 5 6]
13. Python自省[反射]
解析:自省[反射]就是列出对象的所有属性和方法。
14. 实例方法,类方法,静态方法,类变量和实例变量
解析:
[1]实例方法:类的实例能够使用的方法。
[2]类方法:将类本身作为对象进行操作的方法。类方法使用@class method装饰器定义,其第一个参数是类,约定写为cls。类和实例都可以调用类方法。
[3]静态方法:静态方法位于类定义的命名空间中。使用装饰器@static method定义静态方法。类和实例都可以调用静态方法。
[4]类变量和实例变量:类变量定义在类的定义之后,实例变量则是以self.开头,实例也能够访问类变量。
说明:实例方法的第一个参数默认为self,代指实例。self不是一个关键字,而是约定的写法。__init__()是生成实例时默认调用的实例方法。
15. Python应用场景
解析:学习Python也有一段时间了,越发感觉Python功能的强大。用Python做过的事情,如下所示:
[1]数据分析:NumPy,Pandas,Matplotlib,SciPy,Seaborn,PySpark等。
[2]数据挖掘和机器学习:Scikit-Learn,PyMC3,Mayavi,NetworkX等。
[3]自然语言处理:NLTK,Jieba,Gensim(Word2Vec,Doc2Vec)等。
[4]数字图像处理和计算机视觉:cv2,PIL等。
[5]计算机图像学:PyOpenGL等。
[6]深度学习:Caffe,TensorFlow,Theano等。
[7]C++与Python互操作:boost.python,Python/C API等。
[8]异构计算:PyCUDA,PyOpenCL,cgen [3]等。
[9]并行计算:mpi4py,threading,multiprocessing,cython(支持OpenMP)等。
[10]图像界面:PyQt,TkInter等。
[11]网络爬虫:Scrapy,Requests,Beautiful Soup,urllib2,creepy,selenium,etl,database[redis,mysql,mongodb]等。
[12]网站开发:django,Django REST framework,Flask,web.py等。
[13]微信开发[公众号,微信小程序]:wechatpy等。
[14]网络安全:ctypes,PyEMU,IDAPython,sqlmap,DNSRecon,patator,XSSer,HULK,SSLyze等。
说明:Python可以做人工智能和高性能计算,也可以做服务器、移动端和桌面应用开发。总之,用Python去做任何你想做的事情吧,只有想不到,没有做不到。
16. 包管理器conda
解析:
[1]conda list:查看Anaconda包含的库。
[2]conda install <pkg name>:该命令用于安装应用包,比如conda install numpy。
[3]conda update <pkg name>:该命令用于升级应用包,比如conda update numpy。
17. 使用交互式标注
解析:
from PIL import Image
from pylab import *
im = array(Image.open('a.jpg'))
imshow(im)
print 'Please click 1 point'
x = ginput(1)
print 'you clicked: ',x
show()
18. YAML文件格式
解析:YAML文件格式是YAML[YAML Aint Markup Language]编写的文件格式,YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互,可以被支持YAML库的不同的编程语言程序导入。比如C/C++,Python,C#等。
19. Python中的enumerate
解析:enumerate()遍历序列中的元素以及它们的下标。
(1)for i, j in enumerate(('a', 'b', 'c'))
(2)for i, j in enumerate([1, 2, 3])
(3)for i, j in enumerate({'a':1, 'b':2})
(4)for i, j in enumerate('abc')
20. pip install -U / ----upgrade
解析:如果没有安装该软件,那么安装该软件;如果已经安装该软件,那么升级该软件为最新版本。
21. scipy.signal.convolve
解析:scipy.signal.convolve:Convolve two N-dimensional arrays.
>>> from scipy import signal
>>> sig = np.repeat([0., 1., 0.], 100)
>>> win = signal.hann(50)
>>> filtered = signal.convolve(sig, win, mode='same') / sum(win)
>>>
>>> import matplotlib.pyplot as plt
>>> fig, (ax_orig, ax_win, ax_filt) = plt.subplots(3, 1, sharex=True)
>>> ax_orig.plot(sig)
>>> ax_orig.set_title('Original pulse')
>>> ax_orig.margins(0, 0.1)
>>> ax_win.plot(win)
>>> ax_win.set_title('Filter impulse response')
>>> ax_win.margins(0, 0.1)
>>> ax_filt.plot(filtered)
>>> ax_filt.set_title('Filtered signal')
>>> ax_filt.margins(0, 0.1)
>>> fig.tight_layout()
>>> fig.show()
22. numpy.convolve
解析:numpy.convolve:Returns the discrete, linear convolution of two one-dimensional sequences.
>>> np.convolve([1, 2, 3], [0, 1, 0.5])
array([ 0. , 1. , 2.5, 4. , 1.5])
说明:full模式:(N+M-1)
>>> np.convolve([1, 2, 3], [0, 1, 0.5])
array([ 0. , 1. , 2.5, 4. , 1.5])
说明:same模式:max(M,N)
>>> np.convolve([1,2,3],[0,1,0.5], 'valid')
array([ 2.5])
说明:valid模式:max(M,N)-min(M,N)+1
23. Python使用pdb库进行调试
解析:pdb是Python自带的一个包,为Python程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb提供一些常用调试命令,如下所示:
[1]break或b设置断点:设置断点。
[2]continue或c:继续执行程序。
[3]list或l:查看当前行的代码段。
[4]step或s:进入函数。
[5]return或r:执行代码直到从当前函数返回。
[6]exit或q:中止并退出。
[7]next或n:执行下一行。
[8]pp:打印变量的值。
[9]help:帮助。
说明:import pdb; pdb.set_trace()
参考文献:
[1] numpy.meshgrid:numpy.meshgrid — NumPy v1.22 Manual
[2] 渗透测试人员的Python工具箱:http://sanwen8.cn/p/190y8nx.html
[3] Welcome to cgen’s documentation:cgen 2020.2 documentation