向量与矩阵(Numpy)

Reads: 746 Edit

向量和矩阵是数学和数据分析中最基础的对象类型,而python自带的列表本质上是计算机内存中的数据类别,虽然列表类型可以用于向量操作和计算,但是十分不方面,且运算效率较低。好在numpy模块中为我们提供了向量的对象类型!

1 向量

>>> import numpy as np
>>> array1_1=np.array([1,2,3],dtype=int)    # 定义向量
>>> print(array1_1)
[1 2 3]

>>> array1_2 = np.arange(1,10,2)
>>> print(array1_2)
[1 3 5 7 9]

>>> array1_1[1]                   # 向量中元素的索引
2
>>> array1_2[1:4]
array([3, 5, 7])
>>> array1_2[array1_2>3]
array([5, 7, 9])

>>> np.append(array1_1,4)           # 向量中添加元素
array([1, 2, 3, 4])
>>> np.append(array1_2,[11,13])
array([ 1,  3,  5,  7,  9, 11, 13])

>>> array2 = np.array([1,2,3,4,5,6],dtype=float)
>>> print(array2)
[1. 2. 3. 4. 5. 6.]
>>> np.insert(array2,3,3.5)
array([1. , 2. , 3. , 3.5, 3.5, 4. , 5. , 6. ])


>>> np.delete(array1_2,0)					# 删除索引为0的值
array([3, 5, 7, 9])
>>> np.delete(array2,[3,4,5])				# 删除索引为3,4,5的值
array([1., 2., 3., 6.])
>>> np.delete(array2,range(4,7))			删除索引为4到6的值
array([1. , 2. , 3. , 3.5])

2 矩阵

矩阵的定义与操作:

>>> array4_1 = np.array([[1,2,3,4],[5,6,7,8]])
>>> print(array4_1)
[[1 2 3 4]
 [5 6 7 8]]

>>> array4_2 = np.matrix([[1,2,3,4],[5,6,7,8]])
>>> print(array4_2)
[[1 2 3 4]
 [5 6 7 8]]

>>> array4_3=np.arange(1,9).reshape(2,4)
>>> print(array4_3)
[[1 2 3 4]
 [5 6 7 8]]


>>> np.zeros((2,3))
array([[0., 0., 0.],
       [0., 0., 0.]])
>>> np.ones((3,2))
array([[1., 1.],
       [1., 1.],
       [1., 1.]])
>>> np.identity(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
>>> np.diag([1,2,3,4])
array([[1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [0, 0, 0, 4]])

>>> array4 = np.array([[1,2,3,4],[5,6,7,8]])
>>> print(array4)
[[1 2 3 4]
 [5 6 7 8]]
>>> array4[1,1]
6
>>> array4[0,:]
array([1, 2, 3, 4])
>>> array4[:,2]
array([3, 7])
>>> array4[1,1:4]
array([6, 7, 8])

>>> array5=np.array(range(1,13)).reshape(3,4)
>>> print(array5)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
>>> np.append(array5,[[13,14,15,16]],axis=0)
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])
>>> np.append(array5,[[11],[22],[33]],axis=1)
array([[ 1,  2,  3,  4, 11],
       [ 5,  6,  7,  8, 22],
       [ 9, 10, 11, 12, 33]])
>>> np.append(array5,[[11,111],[22,222],[33,333]],axis=1)
array([[  1,   2,   3,   4,  11, 111],
       [  5,   6,   7,   8,  22, 222],
       [  9,  10,  11,  12,  33, 333]])
       
>>> np.insert(array5,1,[[13,14,15,16]],axis=0)
array([[ 1,  2,  3,  4],
       [13, 14, 15, 16],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
>>> np.insert(array5,2,[[11,22,33]],axis=1)
array([[ 1,  2, 11,  3,  4],
       [ 5,  6, 22,  7,  8],
       [ 9, 10, 33, 11, 12]])

>>> np.delete(array5,1,axis=0)
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12]])
>>> np.delete(array5,1,axis=1)
array([[ 1,  3,  4],
       [ 5,  7,  8],
       [ 9, 11, 12]])
>>> np.delete(array5,[1,2],axis=1)
array([[ 1,  4],
       [ 5,  8],
       [ 9, 12]])
>>> np.delete(array5,range(1,3),axis=1)
array([[ 1,  4],
       [ 5,  8],
       [ 9, 12]])

矩阵的运算:

>>> array6=np.array(range(1,13)).reshape(3,4)                       
>>> print(array6)                      
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
>>> array6.T                  
array([[ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11],
       [ 4,  8, 12]])

>>> array7_1 = np.array([[8, 2,3], [14,5,6],[3,8,11]])
>>> array7_2=np.linalg.inv(array7_1)
>>> print(array7_2)
[[ 0.09333333  0.02666667 -0.04      ]
 [-1.81333333  1.05333333 -0.08      ]
 [ 1.29333333 -0.77333333  0.16      ]]

>>> array8_1=np.array([[1, 2,3], [4,5,6],[7,8,9]])
>>> array8_2=np.diag([1,2,3])
>>> np.dot(array8_1,array8_2)
array([[ 1,  4,  9],
       [ 4, 10, 18],
       [ 7, 16, 27]])

Comments

Make a comment