numpy

来源:互联网 发布:软件编程师 编辑:程序博客网 时间:2024/06/08 13:46

numpy是Python用于矩阵计算的模块,下面对numpy作详细介绍:


一、创建

import numpy as np # 用列表对象作参数a = np.array([1,2,3,4,5])# 创建多维的narray对象a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])# arange函数a = np.arange(10)       # 默认从0开始到10(不包括10),步长为1print(a)                # 返回 [0 1 2 3 4 5 6 7 8 9]a1 = np.arange(5,10)    # 从5开始到10(不包括10),步长为1print(a1)               # 返回 [5 6 7 8 9]a2 = np.arange(5,20,2)  # 从5开始到20(不包括20),步长为2print(a2)               # 返回 [ 5  7  9 11 13 15 17 19]# linspace()和matlab的linspace很类似,用于创建指定数量等间隔的序列,实际生成一个等差数列。# 生成首位是0,末位是10,含7个数的等差数列a = np.linspace(0,10,7) # linspace用于生成等差数列,而logspace用于生成等比数列。a = np.logspace(0,4,5)print(a)[  1.00000000e+00   1.00000000e+01   1.00000000e+02   1.00000000e+03   1.00000000e+04]# 创建3*4的全1矩阵a_ones = np.ones((3,4))         print(a_ones)[[ 1.  1.  1.  1.] [ 1.  1.  1.  1.] [ 1.  1.  1.  1.]]a_zeros = np.zeros((3,4))       print(a_zeros)[[ 0.  0.  0.  0.] [ 0.  0.  0.  0.] [ 0.  0.  0.  0.]]# 创建3阶单位矩阵a_eye = np.eye(3)               print(a_eye)[ 1.  0.  0.] [ 0.  1.  0.] [ 0.  0.  1.]]a_empty = np.empty((3,4))       # 创建3*4的空矩阵 print(a_empty)

二、访问

# 获取二维矩阵的行列数a = np.array([[1,2,3,4,5],[6,7,8,9,10]])print(a.shape)          # 结果返回一个tuple元组 (2, 5)print(a.shape[0])       # 获得行数,返回 2print(a.shape[1])       # 获得列数,返回 5print(a[::-1])    # 行逆置print(a[0:1])       # 返回 [[1,2,3,4,5]]print(a[1,2:5])     # 返回 [8,9,10]print(a[1,:])       # 截取第二行,返回 [ 6,7,8,9,10]print(a[1:,2:])     # 截取第一行之后,第2列之后内容,返回[8,9,10]# 按条件获取a = np.array([[1,2,3,4,5],[6,7,8,9,10]])b = a[a>6]      # 截取矩阵a中大于6的元素,返回的是一维数组print(b)        # 返回 [ 7  8  9 10]print(a[a<3]=0)# 首先生成一个布尔矩阵,将布尔矩阵传入[](方括号)实现截取print(a>6) # 返回[[False False False False False] [False  True  True  True  True]]

三、矩阵合并

a1 = np.array([[1,2],[3,4]])a2 = np.array([[5,6],[7,8]])# 注意! 参数传入时要以列表list或元组tuple的形式传入print(np.hstack([a1,a2])) [[1 2 5 6] [3 4 7 8]]print(np.vstack((a1,a2)))[[1 2] [3 4] [5 6] [7 8]]# 矩阵的合并也可以通过concatenatef方法。np.concatenate( (a1,a2), axis=0 ) 等价于 np.vstack( (a1,a2) )# np.concatenate( (a1,a2), axis=1 )等价于 np.hstack( (a1,a2) )

四、fromstring和fromfunction

# fromstring()方法可以将字符串转化成ndarray对象,可以获得字符串的ascii码序列a = "abcdef"b = np.fromstring(a,dtype=np.int8)      # 因为一个字符为8为,所以指定dtype为np.int8print(b)                                # 返回 [ 97  98  99 100 101 102]# fromfunction()方法可以根据矩阵的行号列号生成矩阵的元素。例如创建一个矩阵,矩阵中的每个元素都为行号和列号的和。def func(i,j):     return i+ja = np.fromfunction(func,(5,6))     # 第一个参数为指定函数,第二个参数为列表list或元组tuple,说明矩阵的大小print(a)[[ 0.  1.  2.  3.  4.  5.] [ 1.  2.  3.  4.  5.  6.] [ 2.  3.  4.  5.  6.  7.] [ 3.  4.  5.  6.  7.  8.] [ 4.  5.  6.  7.  8.  9.]]

五、矩阵的运算

    np.sin(a) 对矩阵a中每个元素取正弦,sin(x)
    np.cos(a) 对矩阵a中每个元素取余弦,cos(x)
    np.tan(a) 对矩阵a中每个元素取正切,tan(x)
    np.arcsin(a) 对矩阵a中每个元素取反正弦,arcsin(x)
    np.arccos(a) 对矩阵a中每个元素取反余弦,arccos(x)
    np.arctan(a) 对矩阵a中每个元素取反正切,arctan(x)
    np.exp(a) 对矩阵a中每个元素取指数函数,ex
    np.sqrt(a) 对矩阵a中每个元素开根号

# 矩阵乘法 np.dot()a1 = np.array([[1,2,3],[4,5,6]])        # a1为2*3矩阵a2 = np.array([[1,2],[3,4],[5,6]])      # a2为3*2矩阵if a1.shape[1]==a2.shape[0]):     # True, 满足矩阵乘法条件  print(a1.dot(a2))   print(np.dot(a1,a2))# 矩阵转置a = np.array([[1,2,3],[4,5,6]])print(a.transpose())print(a.T)[[1 4] [2 5] [3 6]]# 用linalg的inv函数来求逆,条件是矩阵的行数和列数相同import numpy as npimport numpy.linalg as lga = np.array([[1,2,3],[4,5,6],[7,8,9]])print(lg.inv(a))[[ -4.50359963e+15   9.00719925e+15  -4.50359963e+15] [  9.00719925e+15  -1.80143985e+16   9.00719925e+15] [ -4.50359963e+15   9.00719925e+15  -4.50359963e+15]]a = np.eye(3)               # 3阶单位矩阵print(lg.inv(a))            # 单位矩阵的逆为他本身[[ 1.  0.  0.] [ 0.  1.  0.] [ 0.  0.  1.]]

六、其它计算

二维数组转一维a.ravel()# 求最大最小值max,mina = np.array([[1,2,3],[4,5,6]])print(a.max())              # 获取整个矩阵的最大值 结果: 6print(a.min())              # 结果:1# 可以指定关键字参数axis来获得行最大(小)值或列最大(小)值print(a.max(axis=0))[4 5 6]print(a.max(axis=1))[3 6]# 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得print(a.argmax(axis=1))[2 2]# 平均值mean(),方差var(),标准差std()print(a.mean())             print(a.mean(axis=0))      print(a.mean(axis=1))      print(a.var())             print(a.var(axis=0))        print(a.var(axis=1))        print(a.std())             print(a.std(axis=0))       print(a.std(axis=1))       # 中值median(),是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值# 中值的函数是median(),调用方法为 numpy.median(x,[axis]),axis可指定轴方向,默认axis=None,对所有数去中值x = np.array([[1,2,3],[4,5,6]])print(np.median(x))         # 对所有数取中值3.5print(np.median(x,axis=0))  # 沿第一维方向取中值[ 2.5  3.5  4.5]print(np.median(x,axis=1))  # 沿第二维方向取中值[ 2.  5.]# 求和sum()和累积和cumsum()print(a.sum())       print(a.sum(axis=0))print(a.sum(axis=1))# 某位置累积和指的是该位置之前(包括该位置)所有元素的和a = np.array([[1,2,3],[4,5,6]])print(a.cumsum()) [ 1  3  6 10 15 21]print(a.cumsum(axis=0))         # 对行方向求累积和[[1 2 3] [5 7 9]]print(a.cumsum(axis=1))         # 对列方向求累积和[[ 1  3  6] [ 4  9 15]]


原创粉丝点击