1.NumPy是Python科学计算的核心库,它提供了一个高性能的多维数组对象,以及用于处理这些矩阵的处理工具;提供了方便和快速的N维数组的记录和计算方法,很多函数库都会用到,如SciPy、Tensorflow等。
import numpy as np
a=np.array([1,2,3])
print(type(a))
print(a.shape)
print(a[0],a[1],a[2])
a[0]=5
b=np.array([[1,2,3],[4,5,6]])
print(b.shape)
print(b[0,0],b[0,1],b[1,0])
为了方便预定义大量的数组,NumPy还提供了许多函数来创建矩阵,比如zeros默认数组为0,ones默认数组为1,full默认数组为自定义数。
import numpy as np
a=np.zeros((2,2))
print(a)
b=np.ones((1,2))
print(b)
c=np.full((2,2),7)
print(c)
d=np.eye(3)
print(d)
e=np.random.random((2,2))
print(e)
多维数组的切割在科学和统计上的计算是非常重要的,在这个程序中,将通过[数组行头,尾:数组列,尾]方式,把多维数组给切片(slicing)出来。
import numpy as np
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
row_r1=a[1,:]
row_r2=a[1:2,:]
print(row_r1,row_r1.shape)
print(row_r2,row_r1.shape)
col_r1=a[:,1]
col_r2=a[:,1:2]
print(col_r1,col_r1.shape)
print(col_r2,col_r2.shape)
在NumPy预定数组的数据类型时,NumPy会根据数组数据,自动挑选合适的数据类型,也可以通过dtype来指定特定的数据类型。
import numpy as np
x=np.array([1,2])
print(x.dtype)
x=np.array([1.0,2.0])
print(x.dtype)
x=np.array([1,2],dtype=np.int64)
print(x.dtype)
通过NumPy可以很轻松地做到数组的计算,如线性代数中的加、减、乘、除、平方等运算,甚至较复杂的矩阵相乘,也可以通过dot()函数来完成。
import numpy as np
x=np.array([[1,2],[3,4]],dtype=np.float64)
y=np.array([[5,6],[7,8]],dtype=np.float64)
print(x+y)
print(np.add(x,y))
print(x+10)
print(x-y)
print(x-[1,2])
print(x*y)
print(np.multiply(x,y))
print(x/y)
print(np.divide(x,y))
print(x**2)
print(np.sqrt(x))
print(x.dot(y))
print(np.dot(x,y))
NumPy提供的与统计有关的计算函数如下:
· sum,总和;
· max,最大;
· min,最小;
· cumsum,累加;
· mean,平均值;
· average,加权平均值;
· median,中间值;
· std,标准偏差;
· var,方差。
import numpy as np
x=np.array([[-1,2,3],[13,14,15]])
print(x)
print(np.sum(x))
print(np.sum(x,axis=0))
print(np.sum(x,axis=1))
print(np.max(x))
print(np.min(x))
print(np.average(x))
print(np.mean(x))
print(np.median(x))
print(np.std(x))
print(np.var(x))
print(x.T)
逻辑判断
import numpy as np
a=np.array([[-1,2,3],[13,14,15]])
bool_idx=((a%2)==0)
print(bool_idx)
print(a[bool_idx])
print(a[a>10])
print(a[a%2==1]*10)
不同尺寸的矩阵相加
在实际的NumPy下做矩阵数据的加、减、乘、除时,会遇到矩阵尺寸不一样的情况,那该怎么处理呢?本节实例提供了三种方法,将不同尺寸的矩阵相加。以运行结果来看,这三种方法求出来的结果一模一样。
方法一:一条一条地通过循环的方法处理。
方法二:使用tile()将小的矩阵依照比例放大。
方法三:交给NumPy自动处理。
import numpy as np
x=np.array([[1,2,3],[4,5,6]])
v=np.array([1,0,1])
y=np.empty_like(x)
for i in range(2):y[i,:]=x[i,:]+v
print(y)
v2=np.tile(v,(2,1))
print(v2)
print(x+v2)
print(x+v)