numpy是python中用于支持科学计算的第三方库。支持各种矩阵运算。

因为有了numpy,矩阵轮和线性代数里面的各种复杂计算变得直观、简便。

python中试用numpy的方式为:import numpy / import numpy as np,后者使用频率更高一些。

numpy中定义了自己的数据结构 array 和 matrix。

1、生成array:

import numpy as np
#生成一个array
>>> a = [1,2,3,4]
>>> a = numpy.array(a)
>>> a
array([1, 2, 3, 4])

>>>a = np.arange(1,7)
>>> a
array([1, 2, 3, 4, 5, 6])

 2、查看array的属性

>>> a = np.arange(1,7)
>>> a
array([1, 2, 3, 4, 5, 6])
>>> a.shape      #a的规模
(6,)
>>> a.size       #a的规模
6
>>> a.max()      #a的最大值
6
>>> a.min()      #a的最大值
1
>>> a.mean()     #a的平均值
3.5

#array的切片,同python
>>> a = a.reshape(3,3)
>>> a
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> a[:,1]
array([2, 5, 8])
>>> a[1,:]
array([4, 5, 6])

>>> a = array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18])
>>> a = a.reshape(2,3,3)
>>> a
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],

       [[10, 11, 12],
        [13, 14, 15],
        [16, 17, 18]]])
>>> a[0,:,1]
array([2, 5, 8])
>>> a[1,2,2]
18
>>> a[:,:,1]
array([[ 2,  5,  8],
       [11, 14, 17]])
 

 3、array的修改

#array的分解:
#reshape(m,n) 重新定义array的大小
>>> a = np.arange(1,10)
>>> a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a.reshape(3,3)
>>> b
array([[1, 2, 3],           #3行3列
       [4, 5, 6],
       [7, 8, 9]])
#array的合并:
#flatten()函数可以将多维的矩阵转换为一维矩阵
>>> b.flatten()
array([1, 2, 3, 4, 5, 6, 7, 8, 9])  #一维矩阵

#array的拆分:
#split(a,n)函数,把a拆分为等长n个array
>>> a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = np.split(a,3)  #把a拆分为等长度的3个array,返回值为一个list,list中存贮拆分后的三个list
>>> b
[array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])] 
#split(a,[m,n])函数,把a在m,n出进行拆分,得到3个array的list
 >>> a = array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c = np.split(a,[4,7])
>>> c
[array([1, 2, 3, 4]), array([5, 6, 7]), array([8, 9])]
#array的合并:ravel(), 展开一个可以解析的结构为1维数组
>>> d = np.ravel(c)
>>> d
array([array([1, 2, 3, 4]), array([5, 6, 7]), array([8, 9])], dtype=object)
>>> d[0]
array([1, 2, 3, 4])
>>> d[3]
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    d[3]
IndexError: index 3 is out of bounds for axis 0 with size 3
# 合并ravel()函数的结果
>>> d = np.ravel(c) 
>>> d 
array([array([1, 2, 3, 4]), array([5, 6, 7]), array([8, 9])], dtype=object)
>>> e = np.hstack(d)
>>> e
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

 4、array的扩展

#数组组合,即用一个数组去扩展另一个数组
>>> a = np.eye(2,2)
>>> a
array([[ 1.,  0.],
       [ 0.,  1.]])
>>> b = 2*a
>>> b
array([[ 2.,  0.],
       [ 0.,  2.]])

#横向扩展 hstack()
>>> c = np.hstack((a,b))
>>> c
array([[ 1.,  0.,  2.,  0.],
       [ 0.,  1.,  0.,  2.]])

#纵向扩展 vstack()
>>> c = np.vstack((a,b))
>>> c
array([[ 1.,  0.],
       [ 0.,  1.],
       [ 2.,  0.],
       [ 0.,  2.]])

#扩展 stack(), 相当于给矩阵增加维度
>>> c = np.stack((a,b))
>>> c
array([[[ 1.,  0.],
        [ 0.,  1.]],

       [[ 2.,  0.],
        [ 0.,  2.]]])

 5、文件的读写

numpy可以直接操作txt、csv等格式的文档,对其中数据进行读写

#读数据
x,y,z = numpy.loadtxt(filepath, delimiter='\n', usecols=(6,7,8), dtype=float)
#即把filepath文件的6,7,8列按float读进来,赋值给x.y,z,其中分隔符是‘\n’,

#写数据
numpy.savetxt(filepath, a, fmt='%s, %s, %s', newline='\n')
#将数据a写进filepath文件中,写入的格式可以在fmt里面选%s、%f等,根据占用列数来设置fmt中的格式化字符串标志数量

 6、matrix

>>> a = np.mat('1 2 3;4 5 6;7 8 9')
>>> a
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])

>>> b
array([[ 2.,  0.],
         [ 0.,  2.]])
>>> a = np.mat(b)
>>> a
matrix([[ 2.,  0.],
          [ 0.,  2.]])

>>> a[0,0] = 1
>>> a[0,1] = 2
>>> a[1,0] = 3
>>> a[1,1] = 4
#a的转置 >>> a.T matrix([[ 1., 3.], [ 2., 4.]]) 
#a的逆阵 >>> a.I matrix([[-2. , 1. ], [ 1.5, -0.5]])

 7、numpy的linalg(线性代数)模块

>>> a
matrix([[ 1.,  2.],
          [ 3.,  4.]])

#计算逆阵
>>> b = np.linalg.inv(a)
>>> b
array([[-2. ,  1. ],
       [ 1.5, -0.5]])

#求解线性方程组 Bx = b
B = np.mat("1 -2 1; 0 2 -8; -4 5 9")
b = np.array([0,8,9])
x = np.linalg.solve(B,b)
>>> x
array([ 155.,   88.,   21.])

#特征值和特征向量
B = np.mat("1 -2 1; 0 2 -8; -4 5 9")
y,z = np.linalg.eig(B)  #y为特征值、z为特征向量

 

posted on 2017-11-16 13:21  望月又一  阅读(243)  评论(0编辑  收藏  举报