向量和矩阵是数学和数据分析中最基础的对象类型,而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]])