Python科学计算
一、函数库
- 线性代数使用LAPACK库
- 快速傅立叶变换使用FFTPACK库
- 常微分方程求解使用ODEPACK库
- 非线性方程组求解以及最小值求解等使用MINPACK库
二、Numpy
1、创建数组
import numpy as np a = np.array([1, 2, 3, 4]) b = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
结果:
很显然,这种方法效率并不高,所以Numpy提供了很多专门用来创建数组的函数,例如:
- arange()类似于内置函数range(),通过设置开始值、终值和步长创建表示等差数列的一维数组,但是得到的结果并不包含终值,示例如下:
c = np.arange(1, 10, 1) # 结果:[1 2 3 4 5 6 7 8 9]
- lispance()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认为True,即包含终值。示例如下:
-
d = np.linspace(1, 10, 10) # 结果:[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] e = np.linspace(1, 10, 10, endpoint=False) # 结果:[ 1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]
logspace()和linspace()类似,不过它创建的数组是等比数列。开始值0表示10^2,终值2表示10^2,步长5表示有5个数值,基数可以通过base参数设置,默认值为10, 创建一个2^1/5的等比数组。 示例如下:
-
f = np.logspace(0, 2, 5) # 结果:[ 1. 3.16227766 10. 31.6227766 100. ]
g = np.logspace(0, 2, 5, base=2, endpoint=False) # 结果:[ 1. 1.31950791 1.74110113 2.29739671 3.03143313]
zeros()、ones()、empty()可以创建指定形状和类型的数组。其中:empty()仅仅分配数组所使用的内存,不对数组元素进行初始化操作,因此它的运行速度是最快的。 zeros()将数组元素初始化为0。
h = np.empty((2, 3), np.int) # 结果:[[ 1 0 506081024][ 0 0 0]] 只分配内存,不对其进行初始化
i = np.zeros(4, np.float) # 结果:[ 0. 0. 0. 0.]
2、存取元素
- 一维数组可以使用和列表相同的方式对数组的元素进行存取
b = a[5] # 用整数作为下标可以获取数组中的某个元素 c = a[3:5] # 用切片作为下标可以获取数组的一部分,包括a[3]但不包括a[5] d = a[:5] # 切片中省略开始下标,表示从a[0]开始 e = a[:-1] # 下标可以使用负数,表示从数组最后往前数 a[2:4] = 101, 102 # 下标可以用来修改元素的值 f = a[1:-1:2] # 切片中的第三个参数表示步长 g = a[::-1] # 省略切片开始的下标和结束的下标,步长为-1,表示整个数组头尾颠倒 h = a[5:1:-2] # 步长为负数时,开始下标必须大于结束下标
- 多维数组的创建与存取
b = np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)
结果为:
[[ 0 1 2 3 4 5] [10 11 12 13 14 15] [20 21 22 23 24 25] [30 31 32 33 34 35] [40 41 42 43 44 45] [50 51 52 53 54 55]]
c = b[0, 3:5] # 取第0行第3列和第4列的数
d = b[4:, 4:] # 取第4行到最后一行的第4列到最后一列的数
e = b[:, 2] # 取所有行的第2列的数
f = b[2::2, ::2] # 取第2行到最后一行,第一列到最后一列的步长为2的数
g = b[(0, 1, 2, 3), (1, 2, 3, 4)] # 取第0行的第1个数,第1行的第2个数,第2行的第3个数,第3行的第4个数
h = b[3:, [0, 2, 5]] # 取第3行之后的所有列中的第0列,第2列,第5列的数
mask = np.array([1, 0, 1, 0, 0, 1], dtype=np.bool) # bool类型的1代表取这行,0代表不取这行 i = b[mask, 2] # 取第0行,第2行,第5行的第2列的数
mask = np.array([1, 0, 1, 0, 0, 1]) j = b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的数
mask = [True, False, True, False, False, True] k =b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的数
l = b[[1, 2]] # 与a[[1,2], :]相同,取第1行和第2行的所有数据
3、庞大的函数库
求和
sum()计算数组元素之和,也可以对列表、元组等和数组类似的序列进行求和。当数组为多维时,它计算数组中所有元素的和。
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.sum(a)
平均值
mean用于求数组的平均值
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.mean(a)
方差
var()用于求数组的方差
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.var(a)
标准差
std()用于求数组的标准差
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.std(a)
最值
用min()和max()计算数组的最小值和最大值,ptp()计算最大值和最小值之间的差,argmin()和argmax()计算最小值和最大值的下标
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.min(a)
np.max(a)
np.ptp(a)
np.argmin(a)
np.argmax(a)
排序
数组的sort()方法用于对数组进行排序
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.sort(a)
中值
用median()可以获得数组的中值
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.median(a)
三、scipy统计-stats
posted on 2018-01-02 15:30 python屌丝的逆袭 阅读(6450) 评论(0) 编辑 收藏 举报