numpy(numerical python) 一个在Python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础
库,多用于在大型、多维数组上执行数值运算
安装numpy
pip install numpy
创建数组
np.array([1,2,3,4,5])
np.array(range(1,6))
np.arange(1,6)
numpy.zeros
返回特定大小,以 0 填充的新数组。
numpy.ones
返回特定大小,以 1 填充的新数组
属性
ndarray.shape
这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。
import numpy as np
a = [[1, 2, 3], [4, 5, 6]]
a = np.array(a)
print(a)
print(a.ndim) # 维度 2
print(a.shape) # 形状 (2, 3)
b = a.reshape(a.shape[0] * a.shape[1]) # 改变数组形状
print(b) # [1 2 3 4 5 6]
c = a.flatten() # 转化为一维
print(c) # [1 2 3 4 5 6]
print(a.astype(float)) # 改变类型
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print b
ndarray.ndim
这一数组属性返回数组的维数。
运算
矩阵运算:加、减、乘(,对应元素相乘)、对每个元素平方(**,注意是两个)
import numpy as np
a = np.arange(10).reshape(2,5)
print(a)
b = np.array([[1], [2]])
print(b)
c = np.array(range(5))
print("c:",c)
print("*"*100)
print(a + b)
print(a + c)
数学函数:sin、cos等
逻辑运算
矩阵相乘(dot,矩阵乘法)
写法 E=np.dot(A,C)或者E=A.dot©
矩阵元素相关 sum()、min()、max()
需要按行或者列进行的话要对axis进行赋值,sxis=0以列为查找单位,sxis=1以行为查找单位
print(‘sum=’,np.sum(A,axis=1))
print(‘min=’,np.min(A,axis=0))
求矩阵的最大和最小索引argmin()和argmax()
求矩阵元素的平均值 mean()、average()
中位数median()
分别对前面的值累加cumsum()
累差运算diff(),计算每一行中后一项与前一项的差
nonzero(),将所有非零元素的行与列坐标分隔开,重构成两个分别关于行和列的矩阵
sort()排序,仅针对每一行
转置 np.transport(A)或者A.T
clip(),比较替换,clip(5,9) 所有小于5的替换为5,大于9的替换为9
索引
a = np.array(range(16)).reshape((4, 4))
print(a)
print("-"*100)
# print(a[:2]) #取前2行0,1
# print(a[:,:2]) # :取所有行,前2列
# print(a[2,3]) # 第2,3位数
# print(a[[1,3],:2]) #取第1,第3行,前2列
print(a[[1,3],[1,3]]) #取第1行的第1个,取第3行的第3个
在第一个列表中,号前为行后为列,单独:为全选,:5为从0到4行
读取数据的方法
def loadtxt(fname, dtype=float, comments='#', delimiter=None,
converters=None, skiprows=0, usecols=None, unpack=False,
ndmin=0, encoding='bytes', max_rows=None):
delimiter 分割字符串
skiprows 跳过前x行
usecols 读取指定的列,索引,元组类型
unpack 行列转换
numpy中的转置
转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方
便的去处理数据
np.arange(20).reshape(4,5).transpose()
np.arange(20).reshape(4,5).T
np.arange(20).reshape(4,5).swapaxes(1,0)
轴(axis)
在numpy中可以理解为方向,使用0,1,2…数字表示,对于一个一维数组,只有一个0轴,对于2维
数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(3,2, 3)),有0,1,2轴
有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算
哪个方向上面的数字的平均值
numpy中的三元运算符
如何把t中小于10的数字替换成0,大于20的替换成20
np.where(t<10,0,20)
numpy中的clip
将小于等于10的替换成10,将大于18的替换成18
t.clip(10,18)
numpy中的nan和inf
nan(NAN,Nan):not a number表示不是一个数字
inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
numpy中的nan的注意点
1.两个nan是不相等的
2.判断数组中nan的个数
3.nan和任何值计算都为nan
求nan的个数
a = np.array([1, 2, np.nan, np.nan, 3])
print(a)
print(a != a)
print(np.count_nonzero(a != a))
print(np.isnan(a))
print(np.count_nonzero(np.isnan(a)))
numpy常用的方法
求和:t.sum(axis=None)
均值:t.mean(a,axis=None)
中值:np.median(t,axis=None)
最大值:t.max(axis=None)
最小值:t.min(axis=None)
极值:np.ptp(t,axis=None)
标准差:t.std(axis=None)
数组的拼接
我们希望把之前案例中两个国家的数据方法一起来研究分析,那么应该怎做?
np.vstack() 垂直拼接
np.hstack() 水平拼接
获取最大值最小值的位置
np.argmax(t,axis=0)
np.argmin(t,axis=1)
创建一个对角线为1的正方形数组(方阵):np.eye(3)
numpy的copy
1.a=b 完全不复制,a和b相互影响
2.a = b.copy(),复制,a和b互不影响