三天搞定python基础系列第一天内容请进传送门:三天搞定python基础-day1
三天搞定python基础-day2
(需要指出,这版三天搞定python系列有点偏向科学计算,机器学习大数据这块,从第二天第三天内容就可以看出来)
大纲:几个python的常用模块的简单应用
NumPy:多维数组的有效操作。 高效的数学函数。
Matplotlib:可视化:2D和(最近)3D图
SciPy:大型库实现各种数值算法,例如:
- 线性和非线性方程的解
- 优化
- 数值整合
Sympy:符号计算(解析的 Analytical)
Pandas:统计与数据分析(day3)
一、导入模块
- 可以通过输入import关键字来导入模块
import numpy
- 或者使用简称,即将模块通过as关键字来命名一个简称
import numpy as np
- 有时您不必导入整个模块,就像
from scipy.stats import norm
练习:导入模块时间,并使用它来获取计算机运行特定代码所需的时间。
import timeit def funl (x, y): return x**2 + y**3 t_start = timeit.default_timer() z = funl(109.2, 367.1) t_end = timeit.default_timer() cost = t_end -t_start print ( 'Time cost of funl is %f' %cost)
二、numpy
ndarray类型
- NumPy提供了一种新的数据类型:ndarray(n维数组)。
- 与元组和列表不同,数组只能存储相同类型的对象(例如只有floats或只有ints)
- 这使得数组上的操作比列表快得多; 此外,阵列占用的内存少于列表。
- 数组为列表索引机制提供强大的扩展
import numpy as np
In [1] : np.array([2, 3, 6, 7]) Out[l] : array([2, 3, 6, 7]) In [2] : np.array([2, 3, 6, 7.]) Out [2] : array([ 2., 3., 6., 7.]) <- Hamogenaous
创建均匀间隔的数组
- arange:
in[1]:np.arange(5)
Out [l]:array([0,1,2,3,4])
range(start, stop, step)的所有三个参数即起始值,结束值,步长都是可以用的 另外还有一个数据的dtype参数
np.arange(10,100,20,dtype = float)
array([ 10., 30., 50., 70., 90.])
np.arange(3, dtype=np.uint8)
array([0, 1, 2], dtype=uint8)
- linspace(start,stop,num)返回数字间隔均匀的样本,按区间[start,stop]计算:
np.linspace(0.,2.5,5)
array([0.,0.625,1.25,1.875,2.5])
这在生成plots图表中非常有用。
- 注释:即从0开始,到2.5结束,然后分成5等份
多维数组矩阵 (Matrix by multidimensional array)
In [1] : a = np.array([[1, 2, 3],[4, 5, 6]]) In [2] : a Out [2] : array([[l, 2, 3] ,[4, 5, 6]]) In [3] : a.shape #<- 行、列数等 (Number of rows, columns etc.) Out [3] : (2,3) In [4] : a.ndim #<- 维度数 (Number of dimensions) Out [4] : 2 In [5] : a,size #<- 元素数量 (Total number of elements) Out [5] : 6
形状变化 (Shape changing)
import numpy as np a = np .arange(0, 20, 1) #1维 b = a.reshape((4, 5)) #4行5列 c = a.reshape((20, 1)) #2维 d = a.reshape((-1, 4)) #-1:自动确定 a.shape =(4, 5) #改变a的形状
例子
import numpy as np
a = np.array([1,2,3,4,5])
b = a.copy ()
c1 = np.dot(np.transpose(a), b)
print(c1)
c2 = np.dot(a, np.transpose(b))
print(c2)
ax = np.reshape(a, (5,1))
bx = np.reshape(b, (1,5))
c = np.dot(ax, bx)
print(c)
相同的元素填充数组
In [1] : np.zeros(3) # zero(),全0填充数组 Out[l] : array([ O., 0., 0.]) In [2] : np.zeros((2, 2), complex) Out[2] : array([[ 0.+0.j, 0.+0.j], [ 0.+O.j, 0.+0.j]]) In [3] : np.ones((2, 3)) # ones(),全1填充数组 Out[3] : array([[ 1., 1., 1.], [ 1., 1., 1.]])
随机数字填充数组
- rand: 0和1之间均匀分布的随机数
In [1] : np.random.rand(2, 4)
Out[1] : array([[ 0.373767 , 0.24377115, 0.1050342 , 0.16582644] ,
[ 0.31149806, 0.02596055, 0.42367316, 0.67975249l])
- randn: 均值为0,标准差为1的标准(高斯)正态分布 {standard normal (Gaussian) distribution with mean 0 and variance 1}
In [2]: np.random.randn(2, 4)
Out[2]: array([[ O.87747152, 0.39977447, -0.83964985, -1.05129899],
[-1.07933484, 0.49448873, -1.32648606, -0.94193424]])
- 其他标准分布也可以使用
数组切片(1D) (Array sliciing(1D))
- 以格式start:stop可以用来提取数组的片段(从开始到不包括stop)
In [77]:a = np.array([0,1,2,3,4])
Out[77]:array([0,1,2,3,4])
In [78]:a [1:3]