Python+Numpy

1、Numpy

NumPy是Python的一种开源的数值计算扩展工具。这种工具可用来存储和处理大型的矩阵,其封装了很多方法。

如在矩阵计算中使用封装的方法要比for循环快的多。

2、random()、array()、arange()的使用

rand(): 随机值,在半开区间 [0.0, 1.0)

randn(): 返回一个样本,具有标准正态分布。

random: 返回一个序列,在半开区间 [0.0, 1.0),需要reshape

array(): 参数是二维数组

arange(): 返回[0,args)的序列,也需要reshape

import numpy as np
if __name__=="__main__":
   a=np.array([[1,2,3],[4,5,6]])
   b=np.arange(10).reshape(2,5)
   c=np.random.random(4).reshape(2,2)
   d=np.random.rand(2,2)
   e=np.random.randn(2,2)
   print a,"\n",b,"\n",c,"\n",d,"\n",e

运行结果:

Python+Numpy_第1张图片

3、ones、zeros、full 、eye、vstack、hstack的使用

ones() 参数是一个tuple

zeros() 参数是一个tuple

full() 参数是一个tuple和一个要填充的数据

eye() 参数是一个整数,方阵

vstack() 竖直拼接,要求列相同,两个矩阵以tuple形式传入参数

hstack() 水平拼接、要求行相同,两个矩阵以tuple形式传入参数

if __name__=="__main__":
    a=np.ones((2,3))
    b = np.eye(3)  
    c=np.zeros((2,3))
    d=np.full((2,2),5)
    print a,"\n",b,"\n",c,"\n",d
    print np.vstack((a,b))
    print np.hstack((a,c))

运行结果:

Python+Numpy_第2张图片

4、dot、add、subtract、multiply、divide、exp、sqrt、max、min、maximum、minimum、modf、reshape、

内积/矩阵相乘、加、减、乘、除、自然常数e的指数、开根号、最大值、最小子、取两者对应位置最大值/最小值、分离整数和小数、重新定义矩阵行列

import numpy as np
if __name__=="__main__":
    a=np.array([1,5,3])
    b=np.array([4,2,6])
    #一维,内积
    c=np.dot(a,b)
    print c
    aa=np.array([[1,2,3],[4,5,6]])
    bb=np.array([[1,2],[3,4],[5,6]])
    #多维,满足矩阵相乘
    cc=np.dot(aa,bb)
    print cc
    #一维加减乘除,两个矩阵必须完全一致
    print np.add(a,a)
    print np.subtract(a,a)
    print np.multiply(a,a)
    print np.divide(a,a)
    #一维的max、min、sqrt、exp
    print np.exp(a)
    print np.sqrt(a)
    print np.max(a)
    print np.min(a)
    #两个矩阵必须一致,每个位置取两个矩阵的对应值得最大值或最小值
    #返回一个同样大小的矩阵
    print np.maximum(a,a)
    print np.minimum(a,a)
    #多维的加减乘除,同上
    print np.add(aa,aa)
    print np.subtract(aa,aa)
    print np.multiply(aa,aa)
    print np.divide(aa,aa)
    #多维的max、min、sqrt、exp同上
    print np.exp(aa)
    print np.sqrt(aa)
    #同上
    print np.maximum(aa,aa)
    print np.minimum(aa,aa)
    #与一维矩阵不同,有水平方向求最大值,有竖直方向求最大值
    #参数0表示竖直方向,1表示水平方向
    print np.max(aa,axis=0)
    print np.max(aa,axis=1)
    print np.min(aa,axis=0)
    print np.min(aa,axis=1)
    #sum,没有参数求矩阵和,参数为0竖直求和,参数为1水平求和
    print np.sum(aa)
    print np.sum(aa,axis=0)
    print np.sum(aa,axis=1)
    #modf把矩阵分解成两个,整数部分和小数部分
    #reshape可以把序列或者矩阵重新定义行列,改变形状
    d=np.array([[1.1,2.2],[3.3,4.4],[3.3,4.4]])
    d= np.modf(d)
    d=np.reshape(d,(2,3,2))
    print d

5、矩阵的转置

①一维二维矩阵转置

a=np.array([[1,2,3]])
b=np.array([[1,2,3],[4,5,6]])
print a.T
print b.T
②高维矩阵转换,transpose(),修改三个坐标轴排列组合

#高行列三维分别编号0,1,2;
a=np.array([[[1,2,3],[4,5,6]],
           [[5,6,7],[7,6,5]]])
print a
#原矩阵
print a.transpose((0,1,2))
#高不变,行列转置
print a.transpose((0,2,1))
#行,高,列-->(2,2,3)-->2个2行3列的矩阵,看图
#从行切,2个[[],[]]。从高切,两行[[[],[]],[[],[]]]。每行三列
#从行切,从高切[[[1,2,3],[5,6,7]],[[4,5,6],[7,6,5]]]
print a.transpose((1,0,2))
#上一个的转置,也可以看图
#从行切,从列切[[[1,5],[2,6],[3,7]],[[4,7],[5,6],[6,5]]]
print a.transpose((1,2,0))
#列,高,行,看图
#从列切,从高切[[[1,4],[5,7]],[[2,5],[6,6]],[[3,6],[7,5]]]
print a.transpose((2,0,1))
#同上,略。同时也等同于a.T
print a.transpose((2,1,0))

Python+Numpy_第3张图片

③矩阵的高维转换swapaxes(),修改两个坐标轴顺序。

a=np.array([[[1,2,3],[4,5,6]],
           [[5,6,7],[7,6,5]]])
print a
#只交换高和行,行、高、列
print a.swapaxes(0,1)  
#只交换高和列,列、行、高
print a.swapaxes(0,2)
#只交换行和列,高、列、行
print a.swapaxes(1,2)






你可能感兴趣的:(Python)