python3 Numpy

一.Numpy提供两种基本的对象 ndarray和 ufunc

1.ndarray是存储单一数据类型的齐次多维数组

2.ufunc是能够对数组进行处理的函数

3.http://www.numpy.org/

二.创建数组

1.array创建数组,将元组或列表作为参数,

 1 import numpy as np#引入numpy库
 2 a=np.array([[1,2],[4,5,7]])#创建数组,将元组或列表作为参数
 3 a2 = np.array(([1,2,3,4,5],[6,7,8,9,10]))#创建二维的narray对象
 4 print(type(a))#a的类型是数组
 5 print(type(a2))
 6 print(a)
 7 print(a2)
 8 ---------------------------------------------------
 9 <class 'numpy.ndarray'>
10 <class 'numpy.ndarray'>
11 [list([1, 2]) list([4, 5, 7])]
12 [[ 1  2  3  4  5]
13  [ 6  7  8  9 10]]
array

2.arange函数创建数组

1 import numpy as np
2 a=np.arange(12)#利用arange函数创建数组
3 print(a)
4 a2=np.arange(1,2,0.1)#arang函数和range函数相似
5 print(a2)
6 ----------------------------------------------------------
7 [ 0  1  2  3  4  5  6  7  8  9 10 11]
8 [1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9]
arange

3.linspace用于创建指定数量等间隔的序列,实际生成一个等差数列

1 import numpy as np
2 a=np.linspace(0,1,12)#从0开始到1结束,共12个数的等差数列
3 print(a)
4 -------------------------------------------------------------------
5 [0.         0.09090909 0.18181818 0.27272727 0.36363636 0.45454545
6  0.54545455 0.63636364 0.72727273 0.81818182 0.90909091 1.        ]
linspace

4.logspace用于生成等比数列

1 import numpy as np
2 a = np.logspace(0,2,5)#生成首位是10的0次方,末位是10的2次方,含5个数的等比数列
3 print(a)
4 -----------------------------------------------------------------
5 [  1.           3.16227766  10.          31.6227766  100.        ]
logspace

5.其他特殊矩阵创建方式

 1 import numpy as np
 2 a_ones = np.ones((3,4))# ones(N)生成一个N长度的一维全一的数组,创建3*4的全1矩阵
 3 print(a_ones)#全1矩阵
 4 
 5 a_zeros = np.zeros((3,4))#zeros(N)生成一个N长度的一维全零的数组,创建3*4的全0矩阵
 6 print(a_zeros)#全0矩阵
 7 
 8 a_eye = np.eye(3)#eye(N)创建一个N * N的单位矩阵,创建3阶单位矩阵
 9 print(a_eye)#单位矩阵,等同于np.identity( N )
10 
11 a_empty = np.empty((3,4))#empty(N)生成一个N长度的未初始化一维的数组,创建3*4的空矩阵
12 print(a_empty)#空矩阵(实际有值)
13 ----------------------------------------------------------------------------------
14 [[1. 1. 1. 1.]
15  [1. 1. 1. 1.]
16  [1. 1. 1. 1.]]
17 [[0. 0. 0. 0.]
18  [0. 0. 0. 0.]
19  [0. 0. 0. 0.]]
20 [[1. 0. 0.]
21  [0. 1. 0.]
22  [0. 0. 1.]]
23 [[0. 0. 0. 0.]
24  [0. 0. 0. 0.]
25  [0. 0. 0. 0.]]
矩阵创建

6.创建数组时dtype指明单个最小元素的类型

 1 #创建数组时可以用dtype指明里面单个元素的类型
 2 import numpy as np
 3 a=np.array([[1,2,3],[4,5,6]],dtype=int)#dtype指明里面单个元素的类型
 4 print(a)
 5 print(type(a))
 6 print(type(a[0]))
 7 print(type(a[0][0]))
 8 print('*'*30)
 9 
10 b=np.array([[1,2,3],[4,5,6]],dtype=str)#dtype指明里面单个元素的类型
11 print(b)
12 print(type(b))
13 print(type(b[0]))
14 print(type(b[0][0]))
15 print('*'*30)
16 
17 c=a.astype(float)#使用astype复制数组,并转换类型
18 print(c)
19 print(type(c))
20 print(type(c[0]))
21 print(type(c[0][0]))
22 print('*'*30)
23 
24 d=np.arange(6,dtype=float).reshape(2,3)#arange使用dtype时只能指明是数字的类型
25 print(d)
26 print(type(d))
27 print(type(d[0]))
28 print(type(d[0][0]))
29 print('*'*30)
30 ----------------------------------------------------------------
31 [[1 2 3]
32  [4 5 6]]
33 <class 'numpy.ndarray'>
34 <class 'numpy.ndarray'>
35 <class 'numpy.int32'>
36 ******************************
37 [['1' '2' '3']
38  ['4' '5' '6']]
39 <class 'numpy.ndarray'>
40 <class 'numpy.ndarray'>
41 <class 'numpy.str_'>
42 ******************************
43 [[1. 2. 3.]
44  [4. 5. 6.]]
45 <class 'numpy.ndarray'>
46 <class 'numpy.ndarray'>
47 <class 'numpy.float64'>
48 ******************************
49 [[0. 1. 2.]
50  [3. 4. 5.]]
51 <class 'numpy.ndarray'>
52 <class 'numpy.ndarray'>
53 <class 'numpy.float64'>
54 ******************************
dtype
扫描二维码关注公众号,回复: 1086967 查看本文章

三.查看数组

reshape方法可以更改数组的形状

 1 import numpy as np#引入numpy库
 2 a=np.array([[1,2],[4,5,7],3])#创建数组,将元组或列表作为参数
 3 a2 = np.array(([1,2,3,4,5],[6,7,8,9,10]))#创建二维的narray对象
 4 print(type(a))#a的类型是数组
 5 print(a)
 6 print(a2)
 7 print(a.dtype)#查看a数组中每个元素的类型
 8 print(a2.dtype)#查看a2数组中每个元素的类型
 9 print(a.shape)#查看数组的行列,3行
10 print(a2.shape)#查看数组的行列,返回行列的元组,2行5列
11 print(a.shape[0])#查看a的行数
12 print(a2.shape[1])#查看a2的列数
13 -------------------------------------------------------------------
14 <class 'numpy.ndarray'>
15 [list([1, 2]) list([4, 5, 7]) 3]
16 [[ 1  2  3  4  5]
17  [ 6  7  8  9 10]]
18 object
19 int32
20 (3,)
21 (2, 5)
22 3
23 5
dtype和shape
 1 import numpy as np
 2 a=np.array([[1,2],[4,5,7],3])
 3 a2=np.array([[1,2,4],[4,5,7],[3,5,8]])
 4 print(a.ndim)#获取数组的维数
 5 print(a2.ndim)
 6 print(a2.T)#简单转置矩阵ndarray
 7 -----------------------------------------------------------------------
 8 1
 9 2
10 [[1 4 3]
11  [2 5 5]
12  [4 7 8]]
ndim和T

 

四.索引和切片和迭代,相似于序列

 1 import numpy as np
 2 a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
 3 print(a)
 4 print(a[:])#选取全部元素
 5 print(a[1])#选取行为1的全部元素
 6 print(a[0:1]) #截取[0,1)的元素
 7 print(a[1,2:5]) #截取第二行第[2,5)的元素[ 8  9 10]
 8 print(a[1,:]) #截取第二行,返回 [ 6  7  8  9 10]
 9 print(a[1,2])#截取行号为一,列号为2的元素8
10 print(a[1][2])#截取行号为一,列号为2的元素8,与上面的等价
11 #与序列索引切片相似,冒号从哪到哪,逗号分隔行列
12 
13 #按条件截取
14 print(a[a>6])# 截取矩阵a中大于6的数,范围的是一维数组
15 print(a>6)#比较a中每个数和6的大小,输出值False或True
16 
17 a[a>6] = 0#把矩阵a中大于6的数变成0,
18 print(a)
19 --------------------------------------------------------------
20 [[ 1  2  3  4  5]
21  [ 6  7  8  9 10]]
22 [[ 1  2  3  4  5]
23  [ 6  7  8  9 10]]
24 [ 6  7  8  9 10]
25 [[1 2 3 4 5]]
26 [ 8  9 10]
27 [ 6  7  8  9 10]
28 8
29 8
30 [ 7  8  9 10]
31 [[False False False False False]
32  [False  True  True  True  True]]
索引和切片
 1 import numpy as np
 2 a=np.arange(4,16).reshape(4,3)
 3 print(a)
 4 print('*'*30)
 5 for i in a:#迭代数组
 6     print(i,end=' ')
 7 print()
 8 print('*'*30)
 9 for row in a:#以行迭代数组
10     print(row,end=' ')
11 print()
12 print('*'*30)
13 for column in a.T:#以列迭代数组
14     print(column,end=' ')
15 print()
16 print('*'*30)
17 print(a.flatten())#以一个列表的形式存储所有元素
18 for item in a.flat:#迭代数组的每一个元素
19     print(item,end=' ')
20 print()
21 print('*'*30)
22 ------------------------------------------------------
23 [[ 4  5  6]
24  [ 7  8  9]
25  [10 11 12]
26  [13 14 15]]
27 ******************************
28 [4 5 6] [7 8 9] [10 11 12] [13 14 15] 
29 ******************************
30 [4 5 6] [7 8 9] [10 11 12] [13 14 15] 
31 ******************************
32 [ 4  7 10 13] [ 5  8 11 14] [ 6  9 12 15] 
33 ******************************
34 [ 4  5  6  7  8  9 10 11 12 13 14 15]
35 [[ 4  5  6]
36  [ 7  8  9]
37  [10 11 12]
38  [13 14 15]]
39 4 5 6 7 8 9 10 11 12 13 14 15 
40 ******************************
迭代

 

五.矩阵matrix

 1 #矩阵matrix ,几乎和数组一样,
 2 import numpy as np
 3 a=np.matrix([[1,2,3],[2,6,4]])
 4 print(a)
 5 a2=np.matrix([1,2,3,4,5,3,4,6,2,4,6])
 6 print(a2)
 7 --------------------------------------------------------
 8 [[1 2 3]
 9  [2 6 4]]
10 [[1 2 3 4 5 3 4 6 2 4 6]]
matrix

 

六.矩阵的合并hstack和vstack

 1 import numpy as np
 2 a1 = np.array([[1,2],[3,4]])
 3 a2 = np.array([[5,6],[7,8]])
 4 
 5 #!注意 参数传入时要以列表list或元组tuple的形式传入
 6 print(np.hstack([a1,a2]))
 7 #横向合并,np.concatenate( (a1,a2), axis=1)等价于np.hstack( (a1,a2) ) 
 8 
 9 print(np.vstack((a1,a2)))
10 #纵向合并,np.concatenate( (a1,a2), axis=0)等价于np.vstack( (a1,a2) )
11 ----------------------------------------------------
12 [[1 2 5 6]
13  [3 4 7 8]]
14 [[1 2]
15  [3 4]
16  [5 6]
17  [7 8]]
合并

 

七.矩阵运算 

 1 import numpy as np
 2 import numpy.linalg as lg#求矩阵的逆需要先导入numpy.linalg
 3 a1 = np.array([[1,2,3],[4,5,6],[2,4,5]])
 4 a2 = np.array([[1,2,4],[3,4,8],[8,5,6]])
 5 print(a1+a2) # 相加
 6 print(a1-a2) # 相减
 7 print(a1/a2) # 对应元素相除,如果都是整数则取商
 8 print(a1%a2) # 对应元素相除后取余数
 9 print(a1**2) # 矩阵每个元素都取n次方
10 print(a1.dot(a2))#点乘满足:第一个矩阵的列数等于第二个矩阵的行数
11 print(a1.transpose())#转置等价于print(a1.T)
12 
13 # 用linalg的inv函数来求逆
14 print(lg.inv(a1))#求逆
15 ---------------------------------------------
16 [[ 2  4  7]
17  [ 7  9 14]
18  [10  9 11]]
19 [[ 0  0 -1]
20  [ 1  1 -2]
21  [-6 -1 -1]]
22 [[1.         1.         0.75      ]
23  [1.33333333 1.25       0.75      ]
24  [0.25       0.8        0.83333333]]
25 [[0 0 3]
26  [1 1 6]
27  [2 4 5]]
28 [[ 1  4  9]
29  [16 25 36]
30  [ 4 16 25]]
31 [[31 25 38]
32  [67 58 92]
33  [54 45 70]]
34 [[1 4 2]
35  [2 5 4]
36  [3 6 5]]
37 [[ 0.33333333  0.66666667 -1.        ]
38  [-2.66666667 -0.33333333  2.        ]
39  [ 2.          0.         -1.        ]]
运算

 

八.处理矩阵

 1 import numpy as np
 2 a = np.array([[1,2,3],[4,5,6]])
 3 print(a.max()) #获取整个矩阵的最大值 结果: 6
 4 print(a.min()) #结果:1
 5 print(a.max(axis=0))#获得每列的最大(小)值
 6 print(a.max(axis=1))#获得每行的最大(小)值
 7 print(a.argmax(axis=1))# 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
 8 print(a.mean())#元素的平均值
 9 print(a.mean(axis=0))#每列平均值
10 print(a.mean(axis=1))#每行平均值
11 print(a.var())#方差相当于函数mean(abs(x - x.mean())**2)
12 print(a.std())#标准差相当于sqrt(mean(abs(x - x.mean())**2))
13 print(np.median(a))# 对所有数取中值
14 print(np.median(a,axis=0))# 列方向取中值
15 print(a.sum())# 对整个矩阵求和
16 print(a.cumsum())#对整个矩阵求累积和,某位置累积和指的是该位置之前(包括该位置)所有元素的和
17 --------------------------------------------------------------
18 6
19 1
20 [4 5 6]
21 [3 6]
22 [2 2]
23 3.5
24 [2.5 3.5 4.5]
25 [2. 5.]
26 2.9166666666666665
27 1.707825127659933
28 3.5
29 [2.5 3.5 4.5]
30 21
31 [ 1  3  6 10 15 21]
矩阵处理

九.分割

 1 import numpy as np
 2 a=np.arange(12).reshape(3,4)
 3 print(a)
 4 
 5 print(np.split(a,2,axis=1))#对a进行分割成2块,以列方向进行操作
 6 print(np.split(a,3,axis=0))#对a进行分割成3块,以行方向进行操作
 7 # print(np.split(a,2,axis=0))array split does not result in an equal division
 8 #split分割只能进行相等的分割
 9 
10 print(np.array_split(a,2,axis=0))
11 #array_split进行不等分割
12 
13 print(np.vsplit(a,3))#纵向分割
14 print(np.hsplit(a,3))#横向分割
15 ----------------------------------------------------------
16 [[ 0  1  2  3]
17  [ 4  5  6  7]
18  [ 8  9 10 11]]
19 [array([[0, 1],
20        [4, 5],
21        [8, 9]]),
22  array([[ 2,  3],
23        [ 6,  7],
24        [10, 11]])]
25 [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
26 [array([[0, 1, 2, 3], [4, 5, 6, 7]]), 
27   array([[ 8,  9, 10, 11]])]
28 [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
分割

十.复制

 1 import numpy as np
 2 a=np.arange(6)
 3 print(a)
 4 b=a
 5 c=a
 6 d=b
 7 print(b is a)
 8 print(id(a),id(b),id(c),id(d))
 9 
10 e=a.copy()
11 print(id(e))
12 ----------------------------------------------
13 [0 1 2 3 4 5]
14 True
15 82754520 82754520 82754520 82754520
16 82754560

复制

十一.补充

 1 import numpy as np
 2 a = np.array([[1,2,3],[4,5,6]])
 3 print(a)
 4 print(type(a))
 5 b=np.arange(12)
 6 print(type(b))
 7 d=np.empty(3)
 8 print(type(d))
 9 #一般创建的都是数组类型,多维数组可以被看做一个矩阵
10 
11 e=np.matrix([[1,2,3],[4,5,6]])#class matrix(N.ndarray)
12 print(e)
13 print(type(e))
14 #专门的矩阵类继承矩阵类型
15 ------------------------------------------------
16 [[1 2 3]
17  [4 5 6]]
18 <class 'numpy.ndarray'>
19 <class 'numpy.ndarray'>
20 <class 'numpy.ndarray'>
21 [[1 2 3]
22  [4 5 6]]
23 <class 'numpy.matrixlib.defmatrix.matrix'>
矩阵

 

猜你喜欢

转载自www.cnblogs.com/yu-liang/p/8669678.html