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为特征向量
行万里路,不忘初心!
浙公网安备 33010602011771号