初识numpy
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,
支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
初步感觉numpy就是用来更方便对数组和矩阵操作的库。
numpy应用
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。
引入numpy模块
import numpy as np
numpy的属性
array = np.array([[1,2,3],[2,3,4]])
print(array)
print('number of dim:',array.ndim) #唯度为2
print('shape:',array.shape) #形状为2*3
print(array.size) #大小为6
array的创建
a = np.array([2,3,4],dtype=np.float) #定义类型
print(a.dtype)
a = np.zeros((3,4)) #3行4列的 全为0矩阵
a = np.ones((3,4)) #3行4列的 全为1矩阵
a = np.arange(10,20,2) #10到20 步长为2
a = np.arange(12).reshape((3,4)) #0到11 二维数组(3,4)
a = np.linspace(1,10,6).reshape((2,3)) #1到10 5等分
numpy的基本运算1
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b) #[10 20 30 40] [0 1 2 3]
#array的加减乘除
c=a+b #[10 21 32 43]
c=a*b #[ 0 20 60 120]
c=b**2 #[0 1 4 9]
c= 10*np.sin(a)
a = np.array([10,20,30,40])
b = np.arange(4)
print(b) #[0 1 2 3]
print(b<3) #[ True True True False]
print(b==3) #[False False False True]
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))
c=a*b #数逐个的乘法
c_dot = np.dot(a,b) #矩阵的乘法
c_dot_2 = a.dot(b)
print(c) #[[0 1] [0 3]]
print(c_dot) #[[2 4] [2 3]]
print(c_dot_2) #[[2 4] [2 3]]
a = np.random.random((2,4)) #第一个random是模块,第二个是函数
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))
print(np.average(a)) #array的平均数
print(np.median(a)) #array的中位数
print(np.mean(a,axis=1)) #求每列的平均值
print(np.sum(a,axis=1)) #axis=1 对行进行计算 axis=0 对列进行计算
numpy的基本运算2
a = np.arange(2,14).reshape((3,4))
print(a)
print(np.argmin(a)) #array中最小值的索引
print(np.argmax(a)) #array中最大值的索引
print(np.cumsum(a)) #累加 [ 2 5 9 14 20 27 35 44 54 65 77 90]
print(np.diff(a)) #累差 [[1 1 1] [1 1 1] [1 1 1]]
a = np.arange(14,2,-1).reshape((3,4))
print(a)
print(np.sort(a)) #逐行排序
print(np.transpose(a)) #矩阵的转置
print(np.clip(a,5,9)) #大于9的置9,小于5的置5
numpy的索引
a = np.arange(3,15).reshape((3,4))
print(a)
print(a[2][1]) #第3行第2列
print(a[2,:]) #':'代表这一行所有的数 [11 12 13 14]
for row in a: #迭代每一行
print(row)
for column in a.T: #迭代每一列
print(column)
print(a.flatten()) #[ 3 4 5 6 7 8 9 10 11 12 13 14]
for item in a.flat: #迭代每一个元素
print(item)
numpy的合并与分割
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.vstack((a,b)) #水平合并 vertical [[1 2 3] [4 5 6]]
print(c)
d = np.hstack((a,b)) #垂直合并 horizontal [1 2 3 4 5 6]
print(d)
a = np.arange(12).reshape(3,4)
print(a)
print(np.split(a,2,axis=1)) #纵向切割
print(np.split(a,3,axis=0)) #纵向切割
print(np.vsplit(a,3)) #水平切割 vertical
print(np.hsplit(a,4)) #垂直切割 horizontal
numpy的复制
a = np.arange(4)
b=a #类似引用
c=a.copy() #新建数组
a[0]=5
print(a is b) #True
print(a is c) #False